Я хочу использовать генератор мета-моделей JPA 2 для Hibernate (версия 1.1.1-Final) (в приложении Spring). Поскольку я использую Mapped Superclass, который является основой для всех сущностей, и этот класс находится в другом банке (для повторного использования), мне нужно отобразить этот класс явным образом в 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;
...
}
Но я не получаю отображение, работающее вместе с Генератором:
Если я использую это 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>
Генератор создает эти два файла:
@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;
}
Как видите, встроенное поле businessId в BuinessEntity_ отсутствует!
Когда я заменяю <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;
}
Итак, мой вопрос: как правильно составить карту? - Или есть вообще лучший способ?