Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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
不带注释的JPA ORM映射是否可行?_Jpa_Java 8_Java 11 - Fatal编程技术网

不带注释的JPA ORM映射是否可行?

不带注释的JPA ORM映射是否可行?,jpa,java-8,java-11,Jpa,Java 8,Java 11,在c#(dotnetcore)中,我可以定义一个assembly/csproj 仅包含POCO(又名POJO)类 没有对任何其他库的引用 Poco对象上没有ORM属性(也称为注释) 然后在另一个assembly/csproj中,我可以“流利地”定义poco和ORM之间的映射。(例如实体框架或NHibernate) 例如:(实体框架核心) 都在同一个模块中(我正在使用gradle,仅供参考),aka,都在同一个.jar中 java(8或11或其他)中是否有将POCO与ORM分开的方法 像这样的po

在c#(dotnetcore)中,我可以定义一个assembly/csproj

  • 仅包含POCO(又名POJO)类
  • 没有对任何其他库的引用
  • Poco对象上没有ORM属性(也称为注释)
  • 然后在另一个assembly/csproj中,我可以“流利地”定义poco和ORM之间的映射。(例如实体框架或NHibernate)

    例如:(实体框架核心)

    都在同一个模块中(我正在使用gradle,仅供参考),aka,都在同一个.jar中

    java(8或11或其他)中是否有将POCO与ORM分开的方法

    像这样的pojo:

    package com.mycompany.pojosandjpaannotationsmixed;
    
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.Table;
    import java.time.OffsetDateTime;
    
    @Entity
    @Table(name = "SomeEntityTable")
    public class SomeEntity {
    
        @Id
        @Column(name = "SomeEntityKey", unique = true)
        @GeneratedValue(strategy = GenerationType.AUTO)
        private long someEntityKey;
    
        @Column(name = "SomeEntityName", unique = true)
        private String someEntityName;
    
        @Column(name = "CreateOffsetDateTime", columnDefinition = "TIMESTAMP WITH TIME ZONE" )
        private OffsetDateTime createOffsetDateTime;
    
        public long getSomeEntityKey() {
            return someEntityKey;
        }
    
        public void setSomeEntityKey(long someEntityKey) {
            this.someEntityKey = someEntityKey;
        }
    
        public String getSomeEntityName() {
            return someEntityName;
        }
    
        public void setSomeEntityName(String someEntityName) {
            this.someEntityName = someEntityName;
        }
    
        public OffsetDateTime getCreateOffsetDateTime() {
            return createOffsetDateTime;
        }
    
        public void setCreateOffsetDateTime(OffsetDateTime createOffsetDateTime) {
            this.createOffsetDateTime = createOffsetDateTime;
        }
    }
    
    public class SomeEntity {
    
        private long someEntityKey;
    
        private String someEntityName;
    
        private OffsetDateTime createOffsetDateTime;
    
    
        public long getSomeEntityKey() {
            return someEntityKey;
        }
    
        public void setSomeEntityKey(long someEntityKey) {
            this.someEntityKey = someEntityKey;
        }
    
        public String getSomeEntityName() {
            return someEntityName;
        }
    
        public void setSomeEntityName(String someEntityName) {
            this.someEntityName = someEntityName;
        }
    
        public OffsetDateTime getCreateOffsetDateTime() {
            return createOffsetDateTime;
        }
    
        public void setCreateOffsetDateTime(OffsetDateTime createOffsetDateTime) {
            this.createOffsetDateTime = createOffsetDateTime;
        }
    
    }
    
    还有其他地方的ORM映射代码?(在另一个模块/.jar中)

    我发现:


    但同样,POJO似乎充满了注释。

    是的。JPA规范规定:

    对象/关系映射信息可以采用以下形式: 中包含的托管持久性类的注释 持久化单元,META-INF目录中包含的orm.xml文件 在持久化单元的根目录中,位于 类路径,并从持久性中引用。xml文件,或 这些因素的组合

    注释只是一种选择。所有映射信息都可以在xml文件中定义,或者两者的组合。在后一种情况下,xml文件上的映射信息将覆盖注释

    例如,这可能是一个
    META-INF/orm.xml
    文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <entity-mappings xmlns="http://xmlns.jcp.org/xml/ns/persistence/orm"
                     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence/orm 
                     http://xmlns.jcp.org/xml/ns/persistence/orm_2_2.xsd"
                     version="2.2">
        <entity class="com.mycompany.pojosandjpaannotationsmixed.SomeEntity">
            <table name="SomeEntityTable" />
            <attributes>
                <id name="someEntityKey">
                    <column name="SomeEntityKey" unique="true" />
                    <generated-value strategy="AUTO" />
                </id>
                <basic name="someEntityName">
                    <column name="SomeEntityName" unique="true" />
                </basic>
                <!--
                 .... 
                 -->
            </attributes>
        </entity>
    </entity-mappings>
    
    
    
    public class SomeEntity {
    
        private long someEntityKey;
    
        private String someEntityName;
    
        private OffsetDateTime createOffsetDateTime;
    
    
        public long getSomeEntityKey() {
            return someEntityKey;
        }
    
        public void setSomeEntityKey(long someEntityKey) {
            this.someEntityKey = someEntityKey;
        }
    
        public String getSomeEntityName() {
            return someEntityName;
        }
    
        public void setSomeEntityName(String someEntityName) {
            this.someEntityName = someEntityName;
        }
    
        public OffsetDateTime getCreateOffsetDateTime() {
            return createOffsetDateTime;
        }
    
        public void setCreateOffsetDateTime(OffsetDateTime createOffsetDateTime) {
            this.createOffsetDateTime = createOffsetDateTime;
        }
    
    }
    
    <?xml version="1.0" encoding="UTF-8"?>
    <entity-mappings xmlns="http://xmlns.jcp.org/xml/ns/persistence/orm"
                     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence/orm 
                     http://xmlns.jcp.org/xml/ns/persistence/orm_2_2.xsd"
                     version="2.2">
        <entity class="com.mycompany.pojosandjpaannotationsmixed.SomeEntity">
            <table name="SomeEntityTable" />
            <attributes>
                <id name="someEntityKey">
                    <column name="SomeEntityKey" unique="true" />
                    <generated-value strategy="AUTO" />
                </id>
                <basic name="someEntityName">
                    <column name="SomeEntityName" unique="true" />
                </basic>
                <!--
                 .... 
                 -->
            </attributes>
        </entity>
    </entity-mappings>