簡體   English   中英

Hibernate自動增量ID和復合鍵

[英]Hibernate auto increment ID and a composite key

我正在使用hibernate版本5.2.4和postgresql v 9.4並嘗試創建一個帶注釋的類,這將幫助我構建一個表,如下所示:

ID | client_name | company_name  |  email      
---+-------------+----------------------------
 1 |    bob      |    smith's    |
 2 |    mark     |  JK warehouse |

其中“ID”應為自動遞增值,而復合鍵應為client_name和company_name。 復合鍵不從任何表引用。

我能夠使用@EmbeddedId和@Embeddable來實現這一點,如下所示:

@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;

...}

表中的結果如下:

     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

但無法合並自動增量ID列。 我也嘗試使用@Idclass並沒有成功。 我試圖google並找到其他方案,其中要求是在可嵌入類中包含Id或者引用其他表,所以最后決定在此處發帖尋求幫助。

非常感謝。

更新:我設法使用@IdClass創建一個復合鍵,使用@GeneratedValue創建一個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       |    | abc@xyz.com
 mark         | JK warehouse  |    | abc@xyz.com
(2 rows)

但這不會自動填充Id的值,請幫忙

嘗試這個:

@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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM