【问题标题】:Set Hibernate access strategy globally?全局设置 Hibernate 访问策略?
【发布时间】:2020-08-27 04:19:39
【问题描述】:

根据Hibernate documentation@Id注解的位置决定了Hibernate将如何访问实体(字段或访问器)

作为 JPA 提供者,Hibernate 可以自省实体属性(实例字段)或访问器(实例属性)。默认情况下,@Id 注释的放置提供了默认访问策略。当放置在一个字段上时,Hibernate 将假定基于字段的访问。放在标识符 getter 上,Hibernate 将使用基于属性的访问。

是否可以通过属性全局定义它(以避免必须在每个实体上放置 @Access(AccessType.FIELD) 或嵌入)?

我找到了this related question,但那是专门针对 Spring Boot 的。

【问题讨论】:

  • 您能解释一下为什么需要这个吗?为什么不能把@Id 放在合适的地方?
  • 您不能在您提到的相关问题中使用相同的策略吗?在父类中拥有访问类型并为所有实体扩展此类似乎是一种通用解决方案。
  • 我主要希望它用于我没有 id 的 @Embeddable 对象。 IntelliJ 用红色下划线显示吸气剂,除非我在每个对象上添加 @Access(AccessType.FIELD)。我想在全球范围内这样做。

标签: java hibernate


【解决方案1】:

您可以创建一个名为orm.xml 的文件并将其放入目录META-INF 中的类路径中。

在该文件中,您可以设置默认值。例如访问类型:

<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings>
    <persistence-unit-metadata>
            <access>PROPERTY</access>
    </persistence-unit-metadata>
</entity-mappings>

您可以在此处找到 XML 架构:https://github.com/hibernate/hibernate-orm/blob/master/hibernate-core/src/main/resources/org/hibernate/jpa/orm_2_2.xsd

【讨论】:

    猜你喜欢
    • 2017-09-13
    • 2020-12-15
    • 2019-08-09
    • 2012-07-21
    • 2023-04-07
    • 2021-08-15
    • 2010-09-05
    • 2020-09-25
    • 2019-05-25
    相关资源
    最近更新 更多