【发布时间】:2011-09-30 18:04:40
【问题描述】:
我在使用 Hibernate 并在插入时强制执行唯一数据成员时遇到问题。
这是我删减的 Entity 对象:
工作流程:
@Entity
public class Workflow {
private long wfId;
private Set<Service> services;
/** Getter/Setter for wfId */
...
@OneToMany(cascade = CascadeType.ALL)
@JoinTable(name = "workflow_services",
joinColumns = @JoinColumn(name = "workflow_id"),
inverseJoinColumns = @JoinColumn(name = "service_id"))
public Set<Service> getServices() {
return services;
}
服务:
@Entity
public class Service {
private long serviceId;
private String serviceName;
/** Getter/Setter for serviceId */
...
@Column(unique=true,nullable=false)
public String getServiceName() {
return serviceName;
}
@OneToMany(cascade = CascadeType.ALL)
@JoinTable(name = "service_operations",
joinColumns = { @JoinColumn(name = "serviceId") },
inverseJoinColumns = { @JoinColumn(name = "operationId") })
public Set<Operation> getOperations() {
return operations;
}
操作:
@Entity
public class Operation {
private long operationId;
private String operationName;
/** Getter/Setter for operationId */
@Column(unique=true,nullable=false)
public String getOperationName() {
return operationName;
}
我的问题:
虽然我在每个对象中都说明了什么是唯一的,但它并没有被强制执行。
在我的 Workflow 对象中,我维护了一组服务。每个服务维护一个操作列表。当工作流被保存到数据库时,我需要它来检查它当前使用的服务和操作是否已经在数据库中,如果是,则将其自身与这些行关联。
目前,我的服务和操作表中出现重复。
我尝试过使用注释: @Table(uniqueConstraints)
但运气为零。
任何帮助将不胜感激
【问题讨论】:
-
您使用的是哪个数据库和方言?您是如何在数据库中创建表的? hbm2ddl?你能显示用于生成表的查询吗?我不认为 hibernate 本身会检查唯一性,但它应该在您的数据库中生成具有适当唯一性约束的表。