2014-02-20 52 views
0

我有这个Play模型类,我试图修改一个对象,当我想保存它时,我得到以下异常:Play Framework:No @ javax.persistence.Id field found in class

java.lang.RuntimeException: No @javax.persistence.Id field found in class [class models.Contact] 
at play.db.ebean.Model._idAccessors(Model.java:39) 
at play.db.ebean.Model._getId(Model.java:52) 

类:

@Entity 
public class Contact extends Model implements Person {//, Comparable<Contact>{ 

private Long id; 

private Client client; 

@Required 
private String email; 

private String profil_picture; 

private Boolean active = new Boolean(true); 

private Boolean favorite = new Boolean(false); 

@Transient 
private Boolean profile_pic_url_init = new Boolean(false); 
@Id 
@GeneratedValue 
public Long getId() { 
    return id; 
} 
@ManyToOne(fetch = FetchType.LAZY) 
@JoinColumn(name="client_id") 
public Client getClient(){ 
    return client; 
} 
public void setClient(Client client){ 
    this.client= client; 
} 
@Column 
public Boolean getFavorite() { 
    return favorite; 
} 
public void setFavorite(Boolean is_favorite) { 
    this.favorite = is_favorite; 
} 
.... 
} 

的代码调用保存()方法:

 List<Contact> contacts_list = current_client.getContacts(); 
     for (Contact c : contacts_list) { 
      c.setFavorite(false); 
      c.save(); 
     } 

类实际上有一个@Id一个内涵,所以任何猜测为什么这不起作用?我试图在谷歌上查找它,但无法找到有关此错误的更多信息。提前致谢!

+1

不知道这是问题的真正原因,但我敢打赌:将所有JPA注释放在字段或getter上,但不要放在字段上,也不要放在getter上。 –

+1

将'@ Id'注释移到'id' fiekd而不是它的getter。顺便说一句,有什么特别的原因,你为什么不想按照Play的方式与公共模型领域?在很多地方玩这种方法,如果你决定不使用它,你也可以开始使用普通的Java应用程序 – biesior

+0

是的,它修复了它,非常感谢!但它背后的实际推理是什么? @ biesior不,没有特别的原因。我实际上从前面的开发人员继承的大部分代码,我只是介绍了一个新功能,其中包括应更新数据库中的一个字段,并偶然发现此错误。 – franciscb

回答

3

@Id注释移动到id字段而不是其getter。