3

最近、ID が埋め込まれたクラスで問題が発生しました。データベース内の既存のエントリを更新しようとすると、「<code>java.lang.RuntimeException: No @javax.persistence.Id field found in class」というエラーが表示されます。このエラーが発生するのは、すでにエキサイティングなデータベース エントリであるオブジェクトに対してupdate()またはを使用している場合のみです。save()を使用save()して新しいエントリを挿入しても問題なく動作し、 で既存のエントリを削除しても問題ありませんdelete()

他の誰かが Play Framework の 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)
    ...
4

1 に答える 1

-1

PKクラスのキー列で@Idアノテーションを使用する必要があります。

Ebeanは、これらを生成するために使用するシーケンスも見つけたいと考えています。

于 2012-12-17T22:35:51.263 に答える