当前位置: 首页 > 面试题库 >

休眠注释中的@UniqueConstraint和@Column(unique = true)

勾裕
2023-03-14
问题内容

@UniqueConstraint@Column(unique = true)有 什么区别?

例如:

@Table(
   name = "product_serial_group_mask", 
   uniqueConstraints = {@UniqueConstraint(columnNames = {"mask", "group"})}
)

@Column(unique = true)
@ManyToOne(optional = false, fetch = FetchType.EAGER)
private ProductSerialMask mask;

@Column(unique = true)
@ManyToOne(optional = false, fetch = FetchType.EAGER)
private Group group;

问题答案:

如前所述,@Column(unique = true)UniqueConstraint仅当单个字段时的快捷方式。

从您给出的示例来看,两者之间存在巨大差异。

@Column(unique = true)
@ManyToOne(optional = false, fetch = FetchType.EAGER)
private ProductSerialMask mask;

@Column(unique = true)
@ManyToOne(optional = false, fetch = FetchType.EAGER)
private Group group;

此代码意味着maskgroup都必须是唯一的,但必须分开。这意味着,例如,如果您有一个 mask.id = 1 的记录,并尝试插入另一个
mask.id = 1的 记录, 则会 出现错误,因为该列应具有唯一值。同样适用于组。

另一方面,

@Table(
   name = "product_serial_group_mask", 
   uniqueConstraints = {@UniqueConstraint(columnNames = {"mask", "group"})}
)

表示mask + group组合的值应该唯一。这意味着您可以拥有例如 mask.id = 1group.id = 1的记录
,如果您尝试插入另一个 mask.id = 1group.id = 2的记录 ,则将其插入成功,而在第一种情况下则不会。

如果要使掩码和组在类级别分别和唯一,则必须编写以下代码:

@Table(
        name = "product_serial_group_mask",
        uniqueConstraints = {
                @UniqueConstraint(columnNames = "mask"),
                @UniqueConstraint(columnNames = "group")
        }
)

这与第一个代码块具有相同的效果。



 类似资料:
  • @UniqueConstraint和@Column(unique = true)有什么区别? 例如: 和

  • 问题内容: 有一个结构。我想以这种方式链接这三个实体:公司应包含ID,公司名称和部门列表,每个部门都有一个工人列表,ID和部门名称。每个工人都有名字,身份证。 我试图与一对多和多对一建立联系,但未成功。 公司 部门 工人 我从开始: 它填充公司,但不填充其他表,也没有创建任何联接(映射)错误: 问题答案: 除了Glenn Lane的答案中提到的级联,您还需要了解双向关联是如何工作的。 它们有一个所

  • 问题内容: 休眠注释应该放在哪里? 它是我的实例变量上方的线吗?还是在吸气剂之前?还是在二传手之前?还是真的不重要吗? 非常感谢 问题答案: 您可以将它们放在 野外 或 吸气剂上 。从《 Hibernate注释参考指南》中: 2.2.1。将POJO标记为持久实体 (…) 根据您是否注释字段或方法,Hibernate使用的访问类型将是字段或属性。EJB3规范要求您在将要访问的元素类型上声明注释,即,

  • 问题内容: 我收到以下异常: 实体类头: 在hibernate.cfg.xml中: 在测试课程中: 我在没有注释的情况下进行了此工作(例如:在映射文件中使用映射),但是简单地使用JPA注释来声明映射似乎更直观-但我似乎无法使其正常工作。 我在这里做错了什么?我要做什么甚至有可能吗?看来我不是唯一遇到这种情况的人,请参阅:这里。 我正在使用hibernate3.5.6-FINAL FWIW。 TIA

  • 问题内容: 我想使用联接表在两个表之间建立一对多关系。 最后,我想使用Hibernate批注执行此操作。 我找到了一些使用xml映射执行此操作的示例,但没有带注释的示例。 我相信这就是需要创建表的方式 问题答案: 不要寻找例子。阅读官方文档: 另外,请注意,这是单向一对多关联的默认设置。因此,如果默认的表名和列名适合您,您甚至不必提供注释。

  • 问题内容: 我正在使用hibernate注释,并且想导出数据库模式。 类似于带有hbm xml文件的schemaexporttask。 问题答案: 确实,原始的Hibernate Core 只能处理Hibernate XML映射文件,而不能处理注释。您需要的是Hibernate Tools 附带的工具。 这是一个改编自Java Persistence With Hibernate的用法示例: 也可