私はバージョン5.2.4とPostgreSQLのV 9.4を休止状態使用して、私は以下のようにテーブルの構築を支援します注釈付きクラスを作成しようとしています:Hibernateは自動インクリメントのIDと複合キー
ID | client_name | company_name | email
---+-------------+----------------------------
1 | bob | smith's |
2 | mark | JK warehouse |
どこで」をID 'は自動インクリメントの値で、 はclient_nameとcompany_nameの複合キーです。複合キーはどのテーブルからも参照していません。次のように
私は@EmbeddedIdと@Embeddableで部分的にこれを達成することができました: Column | Type | Modifiers | Storage
--------------+------------------------+-----------+----------
client_name | character varying(255) | not null | extended
company_name | character varying(255) | not null | extended
email | character varying(255) | | extended
ではなく、次のように表の結果
@Embeddable
public class ClientId implements Serializable {
@Column(name = "client_name")
private String clientName;
@Column(name = "company_name")
private String companyName;
....
}
@Entity(name = "ClientDetails")
@Table(name = "clientdetails")
public class ClientDetails {
@EmbeddedId
private ClientId id;
private String email;
...}
自動増分ID列を組み込むことができます。 また、@Idclassを使ってみましたが、成功しませんでした。私はGoogleに挑戦して、埋め込み可能なクラス内にIDを含むか、他のテーブルへの参照があったので、最終的にここに助けを求めることにしました。
多くのありがとうございます。
更新: は、私は次のように@GeneratedValueで@IdClassとIDを使用して複合キーを作成するために管理:
@Entity
@Table(name = "clientdetails")
@IdClass(ClientId.class)
public class ClientDetails {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id", updatable = false, nullable = false)
private Long id;
@Id
@Column (name="client_name")
private String clientName;
@Id
@Column (name="company_name")
private String companyName;
@Column (name="client_email")
private String email;
....
}
client_name | company_name | id | client_email
-------------+--------------+----+-----------------
bob | smith's | | [email protected]
mark | JK warehouse | | [email protected]
(2 rows)
しかし、これはオートIDの値を移入しない、
ありがとう。あなたのUUIDを生成するソリューションは素晴らしいです。 – kiran
UUIDは、エンティティがdbに保存された後にのみ割り当てられることに注意してください。 postgresql dbにuuid-ossp拡張子を追加することをお勧めします。 – russellhoff
複合IDを(client_name&company_name)として使用し、IDを生成することは可能ですか?つまり、一意性はclient_name&company_nameのみにあります。 id、client_nameおよびcompany_nameがIdclassの場合、一意性は3つの列すべてに適用され、同じclient_nameおよびcompany_nameで複数のエントリを作成することはありません。 poc =#select * from clientdetails; ad118f6e |マーク| JK倉庫| 213e63e4 |マーク| JK倉庫| – kiran