我想在我的应用程序中使用自定义序列生成器,但该实体位于与其他应用程序共享的域模型 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/