最近、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)
...