如何使用oracle db在jpa注释中自动增加id值?如何生成uuid值?

时间:2015-10-01 13:15:50

标签: java oracle hibernate jpa spring-data-jpa

@Entity
@Table(name = "CONTACT_GROUP")
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ContactGroup implements Serializable
{
private static final long serialVersionUID = 7161778136151592279L;
@Id
@GenericGenerator(name = "increment", strategy = "increment")
@GeneratedValue(generator = "increment")
@Column(name = "GRPOUP_ID")
private Long id;

@OneToMany(mappedBy="contactGroup",cascade = { CascadeType.ALL },  targetEntity = Contact.class)
Set<Contact> contacts;
}

@Entity
@Table(name = "CONTACT")
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Contact implements Serializable
{
private static final long serialVersionUID = 7161778136151592279L;
@Id
@GenericGenerator(name = "increment", strategy = "increment")
@GeneratedValue(generator = "increment")
@Column(name = "CONTACT_ID")
Long id;

@GeneratedValue(generator="system-uuid")
@GenericGenerator(name="system-uuid", strategy = "uuid2")
@Column(name="group", unique=true)
String group;

@ManyToOne(cascade={CascadeType.ALL})
@JoinColumn(name = "GRPOUP_ID")
ContactGroup contactGroup;

}

你可以告诉我上面的代码没有得到自动补偿我错了吗

给出ORA-00001:违反了唯一约束

当我一次又一次地运行测试用例时

我如何生成在第一个记录中插入空白值的uuid值

你能否提前告诉我

1 个答案:

答案 0 :(得分:0)

由于您正在使用Oracle DB,您可以定义并使用Oracle的序列来使uuid做下一个事情:

在数据库中创建序列

CREATE SEQUENCE "CONTACT_GROUP_SEQUENCE" 
START WITH 1 
INCREMENT BY 1 -- < here is your "autoincrement" simulation
MAXVALUE 999999999
MINVALUE 1 
NOCACHE 
ORDER

映射序列 @SequenceGenerator并将其用于@GenericGenerator

public class ContactGroup implements Serializable
{

@Id
@SequenceGenerator(name = "CONTACT_GROUP_SQ", sequenceName = "CONTACT_GROUP_SEQUENCE", allocationSize = 0)
@GeneratedValue(generator = "CONTACT_GROUP_SQ", strategy = GenerationType.SEQUENCE)
@Column(name = "GRPOUP_ID")
private Long id;
...

您无法在此link to Oracle documentation中找到有关如何将TableGenerator与Oracle DB一起使用的此示例和其他示例。