1

我只在注释中使用休眠。我的桌子看起来像这样:

@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”查询项目以验证组合不存在的最佳方法是什么?

我知道我可以手动使用 Query 来做到这一点,但是有没有更多的 Hibernate-y 方式来做到这一点?

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

4

1 回答 1

0

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

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

如果您希望在network_idandtype列上实现唯一的约束行为并且您的架构已经创建,请更新您的数据库架构以添加unique constraintonnetwork_idtype列。如下:

   ALTER TABLE NetworkType
   ADD CONSTRAINT uc_network_id_type UNIQUE (network_id, type)

希望这可以帮助!

于 2012-10-14T04:07:40.363 回答