我最近遇到了一个有嵌入式ID的类的问题。每当我想更新数据库中的现有条目时,我都会收到错误“java.lang.RuntimeException: No @javax.persistence.Id field found in class
”。当我在一个已经是令人兴奋的数据库条目的对象上使用update()
或save()
时,我只会收到此错误。使用save()
插入新条目,可以正常工作,删除包含delete()
的现有条目也是如此。
其他人在Play框架Google小组中发布了有关此问题的问题,但遗憾的是它从未得到回答。所以我想我会尝试在这里寻求帮助。
以下是我的代码基本上看起来的方式:
@Entity
@Table(name = "files_location")
public class FilesLocation extends Model {
@EmbeddedId
public FilesLocationPK ids;
@Column(name="status")
public Character status;
@ManyToOne
@MapsId("fileId")
@JoinColumn(name = "file_id", referencedColumnName = "id", insertable = false, updatable = false)
public File file;
@ManyToOne
@MapsId("locationId")
@JoinColumn(name = "location_id", referencedColumnName = "id", insertable = false, updatable = false)
public Location location;
}
@Embeddable
public class FilesLocationPK {
@Column(name="file_id")
public Integer fileId;
@Column(name="location_id")
public Integer locationId;
...
}
错误如下所示:
java.lang.RuntimeException: No @javax.persistence.Id field found in class [class models.FilesLocation]
at play.db.ebean.Model._idAccessors(Model.java:39)
at play.db.ebean.Model._getId(Model.java:52)
at play.db.ebean.Model.hashCode(Model.java:183)
at java.lang.Object.toString(Object.java:219)
at java.text.MessageFormat.subformat(Unknown Source)
at java.text.MessageFormat.format(Unknown Source)
at java.text.Format.format(Unknown Source)
at java.text.MessageFormat.format(Unknown Source)
at com.avaje.ebeaninternal.server.core.Message.msg(Message.java:39)
...
答案 0 :(得分:-1)
您需要在PK类的键列上使用@Id注释。
Ebean也希望找到一个用于生成这些序列的序列。