在不使用主键的情况下检查uniq约束

时间:2012-10-14 01:45:46

标签: java hibernate

我只使用带有Annotations的hibernate。我的表看起来像这样:

@Entity
@Table(name = "NetworkType",
    uniqueConstraints = {@UniqueConstraint(columnNames = {"network_id", "type"})})

public class NetworkType implements Serializable {

    @Id
    private long id;

    @Column(name = "network_id", nullable = false)
    private long networkId;

    @Column(name = "type", nullable = false)
    private String type;
    ...

目前,当我两次编写相同的NetworkType时,由于UniqueConstraint(预期),它会抛出异常。

我的想法是在检查之前先阅读该项目。问题是,我的主键是Id,我需要它,因为其他表引用了这个表。

查询“network_id”和“type”项目以确认该组合尚不存在的最佳方法是什么?

我知道我可以手动使用查询来执行此操作,但有更多的Hibernate-y方式吗?

一般来说,在不使用PK的情况下“获取”对象的正确方法是什么?条件或查询是最佳方式吗?

1 个答案:

答案 0 :(得分:0)

@UniqueConstraint 主要由数据库架构生成工具用于创建数据库架构。如果使用,它们将生成具有@UniqueConstraint中提到的具有唯一约束的列的表。

@UniqueConstraint在数据操作期间没有任何影响/用法。

如果您希望在network_idtype列上实现唯一约束行为并且您的架构已经创建,更新数据库架构以在{{1}上添加unique constraintnetwork_id列。如下所示:

type

希望这有帮助!