【问题标题】:Hibernate metadata for uniqueness休眠元数据以实现唯一性
【发布时间】:2014-12-04 13:38:29
【问题描述】:

我正在尝试从休眠中获取尽可能多的元数据,但我正在努力解决一些限制,例如唯一性。

我一直在尝试使用:

AbstractEntityPersister metadata = (AbstractEntityPersister) sessionFactory.getClassMetadata( clazz );
boolean[] uniqueness = metadata.getPropertyUniqueness();

但似乎唯一性数组总是对所有属性说false,我也使用EntityPersister 来获取可空性(getPropertyNullability),它工作正常。

有什么想法吗?

(顺便说一句,我正在使用 HBM,如果它很重要的话。几乎想诉诸直接解析 HBM 文件,但似乎是一个非常丑陋的解决方案)。

【问题讨论】:

  • 只是为了确定,<property name="foo" unique="true" /> 的 propertyUniqueness false ?
  • 是的,如果不清楚,抱歉。我得到一个propertiesNames.length大小的数组,但所有的值都是假的。
  • 您是否使用此 XML 配置创建了数据库?因为如果现有数据库不包含唯一性,则仅此配置不会改变运行时的情况。 unique="true" 设置只有在实际创建数据库时才会生效。
  • 是的,数据库中的几个属性上都有UNIQUE CONSTRAINT。我认为问题正如你所说,getPropertyUniqueness实际上不是我应该使用的。

标签: java hibernate metadata


【解决方案1】:

刚刚查看了 AbstractEntityPersister 的源代码。好像是这样填充的:

propertyUniqueness[i] = prop.getValue().isAlternateUniqueKey();

这似乎表明“getPropertyUniqueness”更适合命名为“getAlternateUniqueKey”。 很可能,getPropertyUniqueness 将仅返回 true

unique-key="true"

而不是为了

unique="true"

在你的hbm.xml

【讨论】:

  • 哦,如果是这样的话,那么是的..这不是我要找的。那么问题就变成了,是否有可能以某种方式获得这些信息。
  • 我不知道 hbm.xml 配置的另一种方式。使用 JPA 样式的注解(@Entity@OneToMany 等),您可以使用反射在运行时分析注解。 @Column(unique = true)
  • @geert3 你可以看看这个问题stackoverflow.com/questions/27602318/…请吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-29
  • 1970-01-01
相关资源
最近更新 更多