Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate注释/XML变通方法_Java_Xml_Hibernate_Jpa_Orm - Fatal编程技术网

Java Hibernate注释/XML变通方法

Java Hibernate注释/XML变通方法,java,xml,hibernate,jpa,orm,Java,Xml,Hibernate,Jpa,Orm,我在hibernate中从事一个项目,其中既有注释,也有xml映射实体 这是设置,实体/类别A基于注释 Class A @Id long id; 我需要类a中的集合,该集合只能通过XML配置进行映射。对于我所知道的给定实体,我们不能混合使用注释和xml 但是我可以创建一个包装类,称之为X,并使用集合XML配置为X创建一个对应的XML映射吗?所以我们有: Class A @Id long id; Object X; 然后还有一个X.hbm.xml文件。注意,这个文件将包含映射,以从表B中

我在hibernate中从事一个项目,其中既有注释,也有xml映射实体

这是设置,实体/类别A基于注释

Class A

@Id
long id;
我需要类a中的集合,该集合只能通过XML配置进行映射。对于我所知道的给定实体,我们不能混合使用注释和xml

但是我可以创建一个包装类,称之为X,并使用集合XML配置为X创建一个对应的XML映射吗?所以我们有:

Class A

@Id
long id;

Object X;
然后还有一个X.hbm.xml文件。注意,这个文件将包含映射,以从表B中构造一个列的集合,该集合由a的主键映射,主键是B中的外键。因此我猜它实际上必须引用表a和B

这一变通办法是否有效?看起来很难…

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

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>

org.hibernate.ejb.HibernatePersistence
META-INF/orm-custom.xml
orm-custom.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>


这里有一些文档:我有点困惑,所以您的解决方案允许我们通过XML覆盖注释?因此,我可以创建一个包含所有注释的类,名为“your.Entity”,该类的一个字段/属性可以通过这个orm-custom.xml文件覆盖?@James,您最好参考文档。事实上,我按你的要求做了。我在一个外部jar中有一个实体,这个实体用于获取它的列表。为了覆盖这个,我使用了orm自定义。xml@James “EJB3中元数据的主要目标是注释,但EJB3规范提供了一种通过XML部署描述符覆盖或替换注释定义的元数据的方法。在当前版本中,仅支持纯EJB3注释重写。如果希望在某些实体中使用特定于Hibernate的功能,则必须使用注释或回退到hbm文件。当然,您可以混合和匹配带注释的实体和hbm文件中描述的实体。”