id
以降 フィールドはすでに一意であり、自動インクリメントされます。この場合、複合IDは必要ないため、エンティティは次のようになります。
@Id
@Column(name = "id")
public long getId() {
return id;
}
@Column(name = "subid")
public int getSubid() {
return subid;
}
エンティティは、エンティティマネージャを使用してIDでフェッチできます:
entityManager.find(MyEntity.class, entityId);
または、id
の両方を取得するクエリを使用してエンティティをフェッチすることもできます およびsubid
:
MyEntity myEntity = entityManager.createTypeQuery("select me from MyEntity where id = :id and subid = :subid", MyEntity.class)
.setParameter("id", entityId)
.setParameter("subid", entitySubId)
.getSingleResult();
Hibernateには
残念ながら、複合IDでは機能しないため、独自の拡張SelectGenerator
を作成する必要があります。 または、単一の文字列id_sub_id
を使用します IDとサブIDを1つのVARCHAR列に結合する列:
'1-0'
'1-1'
'2-0'
'2-1'
データベース固有のストアドプロシージャを使用して2つの列を更新し、2つの列をVARCHARに集約するデータベーストリガーを作成する必要があります。次に、標準のSelectGenerator
を使用して集計列をマップします 文字列フィールドへ:
@Id
@Column(name = "id_sub_id")
@GeneratedValue( strategy = "trigger" )
@GenericGenerator(
name="trigger", strategy="org.hibernate.id.SelectGenerator",
parameters = {
@Parameter( name="keys", value="id_sub_id" )
}
)
public String getId() {
return id;
}