![](/img/trans.png)
[英]hibernate & jpa : table with composite primary key : auto increment problem
[英]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.