2010-03-23 58 views
2

我想在我的應用程序中使用自定義序列生成器,但實體位於與其他應用程序共享的域模型jar中。顯然,實體註釋可以在orm.xml中被覆蓋,但我無法弄清楚正確的XML咒語是否可以使其發揮作用。Hibernate:我可以用自定義生成器使用XML覆蓋標識符生成器嗎?

我可以修改批註在這樣這個實體:

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

但我需要這一點是爲了替代原有的註釋以某種方式映射到orm.xml。看看orm.xml模式here看來,除了「序列」和「表格」之外,我甚至無法指定生成類型。

我應該提到,我正在使用JPA和Hibernate,如果這很重要。

回答

4

你看過hibernate註釋文檔嗎? http://www.redhat.com/docs/manuals/jboss/jboss-eap-4.3/doc/hibernate/Annotations_Reference_Guide/Overriding_metadata_through_XML.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> 
+0

謝謝,這可能會工作,但我不再在這個項目上工作。 – 2010-05-27 13:38:19

+2

沒問題,我只是有同樣的問題,花了半天的時間找到解決方案,所以我想我會回答,以便其他人可能會更容易地找到它下一次:) – 2010-05-31 09:22:56