3

我最近遇到了一个带有嵌入式 id 的类的问题。每当我想更新数据库中的现有条目时,都会收到错误“<code>java.lang.RuntimeException: No @javax.persistence.Id field found in class”。当我使用update()save()在一个已经是令人兴奋的数据库条目的对象上时,我只会收到此错误。用于save()插入新条目,没有问题,删除现有条目也是如此delete()

其他人在 Play Framework Google Group 中发布了一个关于这个问题的问题,但遗憾的是它从未得到回答。所以我想我会尝试在这里寻求帮助。

这是我的代码的基本外观:

@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)
    ...
4

1 回答 1

-1

您需要在 PK 类中的键列上使用 @Id 注释。

Ebean 也将希望找到一个序列以用于生成这些。

于 2012-12-17T22:35:51.263 回答