gpt4 book ai didi

java - Hibernate:强制执行唯一数据成员

转载 作者:行者123 更新时间:2023-12-01 05:39:00 25 4
gpt4 key购买 nike

我在使用 Hibernate 并在插入时强制执行唯一数据成员时遇到问题。

这是我的删节实体对象:

工作流程:

@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;
}
<小时/>

我的问题:

虽然我已经在每个对象中声明了哪些内容应该是唯一的,但它并没有被强制执行。

在我的工作流对象内,我维护一组服务。每个服务维护一个操作列表。当工作流保存到数据库时,我需要它检查它当前使用的服务和操作是否已在数据库中,如果是,则将其自身与这些行相关联。

目前,我的服务和运营表中出现重复。

我尝试过使用注释: @Table(uniqueConstraints)

但运气为零。

任何帮助将不胜感激

最佳答案

unique 或 uniqueConstraints 属性不用于强制数据库中的唯一性,但如果您从 hibernate 生成它,则会创建正确的 DDL(也用于文档,但这是有争议的)。

如果您在 hibernate 中声明某些内容是唯一的,您也应该通过添加约束在数据库中声明它。

将这一点发挥到极致,您可以创建一个映射,其中 PK 在数据库中不是唯一的,当 hibernate 尝试通过调用 Session.load 加载一项时会抛出异常,并突然发现有2 项。

关于java - Hibernate:强制执行唯一数据成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7614288/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com