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

时间:2010-03-23 20:42:33

标签: hibernate mapping override sequence generator

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

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

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

但我需要以某种方式将此映射到orm.xml以覆盖原始注释。查看orm.xml架构here,除了“sequence”和“table”之外,我甚至无法指定生成类型。

我应该提一下,如果重要的话,我正在使用JPA和Hibernate。

1 个答案:

答案 0 :(得分:4)

您是否看过hibernate注释文档? http://www.redhat.com/docs/manuals/jboss/jboss-eap-4.3/doc/hibernate/Annotations_Reference_Guide/Overriding_metadata_through_XML.html

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

例如,请考虑以下实体:

@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>