Play 2.0.4更新使用@EmbeddedId的类时出现问题

时间:2012-12-07 15:10:31

标签: java playframework playframework-2.0 ebean

我最近遇到了一个有嵌入式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)
    ...

1 个答案:

答案 0 :(得分:-1)

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

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