2016-12-13 17 views
1

私はバージョン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の値を移入しない、

答えて

0

てみてください助けてくださいこれは:

@Id 
@GeneratedValue(strategy = GenerationType.SEQUENCE) 
private Integer gid; 

また、識別情報としてUUIDを試すこともできます。ここで私はUUIDを生成する方法です:

@Id 
@Column(name = "ETAPA_ID", columnDefinition = "uuid") 
@Type(type = "org.hibernate.type.PostgresUUIDType") 
@GenericGenerator(name = "uuid2", strategy = "uuid2") 
@GeneratedValue(generator = "uuid2") 
private UUID id; 
+1

ありがとう。あなたのUUIDを生成するソリューションは素晴らしいです。 – kiran

+0

UUIDは、エンティティがdbに保存された後にのみ割り当てられることに注意してください。 postgresql dbにuuid-ossp拡張子を追加することをお勧めします。 – russellhoff

+0

複合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

関連する問題