Ral*_*lph 7 java hibernate jpa
我想在Hibernate(版本1.1.1-Final)(在Spring应用程序中)使用JPA 2 Meta模型生成器.因为我使用Mapped Superclass作为所有实体的基础,并且这个类位于不同的jar中(供重用)我需要在XML中显式地映射这个类(仅用于元模型生成,因为它无需任何额外的工作准时的东西)---可能有人提示如何解决这个问题,但这不是问题.
此映射的超类(BusinessEntity)使用嵌入式类(BusinessId).
@SuppressWarnings("serial")
@MappedSuperclass
public abstract class BusinessEntity<T extends Serializable>
implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private Long id;
@Embedded
private BusinessId<T> businessId;
...
}
@Embeddable
public class BusinessId<T> implements Serializable {
@Column(nullable = false, unique = true, name = "businessId")
private long businessId;
...
}
Run Code Online (Sandbox Code Playgroud)
但我没有得到映射与Generator一起工作:如果我使用它 orm.xml
<?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
http://java.sun.com/xml/ns/persistence/orm_2_0.xsd"
version="2.0">
<mapped-superclass class="BusinessEntity"
access="FIELD">
<attributes>
<id name="id">
<column nullable="false"/>
<generated-value strategy="AUTO"/>
</id>
<embedded name="businessId"/>
</attributes>
</mapped-superclass>
<embeddable class="BusinessId"
access="FIELD">
<attributes>
<basic name="businessId">
<column nullable="false" unique="true"/>
</basic>
</attributes>
</embeddable>
</entity-mappings>
Run Code Online (Sandbox Code Playgroud)
Generator创建这两个文件:
@StaticMetamodel(BusinessEntity.class)
public abstract class BusinessEntity_ {
public static volatile SingularAttribute<BusinessEntity, Long> id;
}
@StaticMetamodel(BusinessId.class)
public abstract class BusinessId_ {
public static volatile SingularAttribute<BusinessId, Long> businessId;
}
Run Code Online (Sandbox Code Playgroud)
你可以看到,BuinessEntity_中的嵌入式字段businessId丢失了!
当我更换<embedded name="businessId"/>由<basic name="businessId" />该生成器创建这种不可编译的类(一般T不能得到解决).
@StaticMetamodel(BusinessEntity.class)
public abstract class BusinessEntity_ {
public static volatile SingularAttribute<BusinessEntity, Long> id;
public static volatile
SingularAttribute<BusinessEntity, BusinessId<T>> businessId;
}
Run Code Online (Sandbox Code Playgroud)
所以我的问题是如何正确映射这些东西? - 或者总体上有更好的方法吗?
<basic> 不能用于复杂类型。您必须使用<嵌入>。当注释处理器应用于 orm.xml 时,我也遇到了一些缺点。
我不久前(2月18日)提交了这个问题:
http://opensource.atlassian.com/projects/hibernate/browse/METAGEN-57
还没有看过。似乎它没有受到太多关注,因为处理器正在处理注释。
我建议您也针对您的问题提交一个问题。
| 归档时间: |
|
| 查看次数: |
4996 次 |
| 最近记录: |