Hibernate:我可以使用 XML 和自定义生成器覆盖标识符生成器吗?

标签 hibernate mapping overriding sequence generator

我想在我的应用程序中使用自定义序列生成器,但该实体位于与其他应用程序共享的域模型 jar 中。显然实体注释可以在 orm.xml 中被覆盖,但我无法找出正确的 XML 咒语来让它工作。

我可以像这样修改实体中的注释:

@GenericGenerator(name = "MYGEN", strategy = "MyCustomGenerator")
@GeneratedValue(generator = "MYGEN")

但我需要以某种方式将其映射到 orm.xml 以便覆盖原始注释。查看 orm.xml 架构 here看来我什至无法指定除了“序列”和“表”之外的生成类型。

我应该提到,如果这很重要的话,我正在将 JPA 与 Hibernate 结合使用。

最佳答案

你看过hibernate注释文档吗? https://docs.jboss.org/hibernate/stable/annotations/reference/en/html/xml-overriding.html

它很好地解释了如何覆盖 orm xml 中的注释配置,

例如,考虑这个实体:

@Entity
@Table(name = "API_USERS")
public class ApiUser {

    @Id
    @Column(name = "ID", unique = true, nullable = false, precision = 6, scale = 0)
    private Long id;
    ...
}

要使用我使用的序列生成器覆盖 ID 字段:

<?xml version="1.0" encoding="UTF-8"?>

<entity-mappings 
  xmlns="http://java.sun.com/xml/ns/persistence/orm"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm orm_1_0.xsd"
  version="1.0">
    <entity class="com.muzicall.apiusers.entity.ApiUser" access="FIELD">
        <attributes>
            <id name="id">
                <column name="id"/>
                <generated-value generator="apiUserIdGen" strategy="SEQUENCE"/>
                <sequence-generator name="apiUserIdGen" sequence-name="api_users_seq" allocation-size="1"/>
            </id>
        </attributes>
    </entity>
</entity-mappings>

关于Hibernate:我可以使用 XML 和自定义生成器覆盖标识符生成器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2503454/

相关文章:

javax.persistence.PersistenceException : [PersistenceUnit: vodPersistenceUnit] class or package not found

hibernate - 在HBM中将枚举添加为类属性

java - 我应该使用哪个版本的 Hibernate 工具文件来生成 java 5 的 hibernate POJO

mapping - 定义文档提升字段

ruby-on-rails - rails : Overriding ActiveRecord association method

java - hibernate 、Java 9 和 SystemException

java - 推土机试图将一个类映射到它的接口(interface)

json - Swift - 嵌套对象的映射(Objectmapper)

java - 使用 throws 子句运行时行为覆盖方法

WordPress - 覆盖插件中的功能