2014-10-17 63 views
0

我正在开发一个hibernate项目,其中有注释和xml映射的实体。Hibernate Annotation/XML解决方法

这里是设置,实体/类A是基于注释的。

Class A 

@Id 
long id; 

我需要A类中的集合,它只能通过XML配置进行映射。我们无法为我知道的给定实体混合使用注释和xml。

但是,我可以创建一个包装类,将其称为X,并使用集合xml配置为X创建相应的XML映射,我将放入A?所以我们有:

Class A 

@Id 
long id; 

Object X; 

然后还有一个X.hbm.xml文件。注意这个文件将包含映射,以便制定来自说表B的列的集合,该列由A的主键(它是B中的外键)映射。因此,我猜它实际上必须引用表A和B.

此解决方法是否正常工作?似乎是一个长镜头...

回答

0

您可以尝试映射文件(我用它们来重新定义“外部”实体的一些属性)

的persistence.xml

<persistence-unit name="yourPersistenceUnit" transaction-type="RESOURCE_LOCAL"> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    <mapping-file>META-INF/orm-custom.xml</mapping-file> 

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 orm_2_0.xsd" 
     version="2.0"> 

    <entity class="your.Entity"> 
     <attributes> 
      <one-to-many name="attributes" fetch="LAZY"/> 
      <one-to-many name="answers" fetch="LAZY"/> 
     </attributes> 
    </entity> 
</entity-mappings> 
+0

下面是一些文档:http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html/xml-overriding.html – Multisync 2014-10-17 09:22:19

+0

我有点糊涂了,所以您的解决方案允许我们覆盖注释thr呃XML?所以我可以有一个名为“your.Entity”的所有注释的类,并且此类的一个字段/属性可以通过此orm-custom.xml文件重写? – James 2014-10-17 19:30:53

+0

@詹姆斯,你最好参考文档。其实,我做了你所问的。我在外部jar中有一个实体,这个实体使用EAGER作为它的列表。为了覆盖这个,我使用了orm-custom.xml – Multisync 2014-10-17 19:38:25