Java 父字段上的Hibernate注释

Java 父字段上的Hibernate注释,java,hibernate,jpa,Java,Hibernate,Jpa,我有一个POJO类,没有特殊的Hibernate注释或信息,如下所示: public class Parent{ Long id; String foo; String bar; /* ... getters and setters, toString(), etc... */ } 我想创建一个带有Hibernate注释的子类。其思想是第一个类将不依赖于它,第二个类将拥有所有JPA/Hibernate特定的东西。如何在不重新创建父级中的所有字段的情况下执行此操作?我想在

我有一个POJO类,没有特殊的Hibernate注释或信息,如下所示:

public class Parent{
   Long id;
   String foo;
   String bar;
   /* ... getters and setters, toString(), etc... */
}
我想创建一个带有Hibernate注释的子类。其思想是第一个类将不依赖于它,第二个类将拥有所有JPA/Hibernate特定的东西。如何在不重新创建父级中的所有字段的情况下执行此操作?我想在类上添加Hibernate注释

@Entity
public class PersistentChild extends Parent{
  // ????
}

如果要外部化映射,必须使用xml映射文件。

如果要外部化映射,必须使用xml映射文件。

如果要外部化映射,必须使用xml映射文件。

如果要外部化映射,必须使用xml映射文件。

可以使用
@MappedSuperclass
在POJO上添加注释,然后添加其他注释,因为它是正常的JPA实体。但是在这种情况下,注释只会影响从它继承的实体类。例如:

@MappedSuperclass
public class Parent implements Serializable {
     @Id
     Long id;
     @Column(name = "foo", required = true)
     String foo;
     @Column(name = "bar", required = false)
     String bar;
     /* ... getters and setters, toString(), etc... */
}
如果确实不想修改超类,可以使用映射文件:

<?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_1_0.xsd" version="1.0">
    <mapped-superclass class="Parent">
        <!-- add your mapping here -->
    </mapped-superclass>
</entity-mappings>

您可以在POJO上使用
@MappedSuperclass
注释,然后添加其他注释,因为它是一个普通的JPA实体。但是在这种情况下,注释只会影响从它继承的实体类。例如:

@MappedSuperclass
public class Parent implements Serializable {
     @Id
     Long id;
     @Column(name = "foo", required = true)
     String foo;
     @Column(name = "bar", required = false)
     String bar;
     /* ... getters and setters, toString(), etc... */
}
如果确实不想修改超类,可以使用映射文件:

<?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_1_0.xsd" version="1.0">
    <mapped-superclass class="Parent">
        <!-- add your mapping here -->
    </mapped-superclass>
</entity-mappings>

您可以在POJO上使用
@MappedSuperclass
注释,然后添加其他注释,因为它是一个普通的JPA实体。但是在这种情况下,注释只会影响从它继承的实体类。例如:

@MappedSuperclass
public class Parent implements Serializable {
     @Id
     Long id;
     @Column(name = "foo", required = true)
     String foo;
     @Column(name = "bar", required = false)
     String bar;
     /* ... getters and setters, toString(), etc... */
}
如果确实不想修改超类,可以使用映射文件:

<?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_1_0.xsd" version="1.0">
    <mapped-superclass class="Parent">
        <!-- add your mapping here -->
    </mapped-superclass>
</entity-mappings>

您可以在POJO上使用
@MappedSuperclass
注释,然后添加其他注释,因为它是一个普通的JPA实体。但是在这种情况下,注释只会影响从它继承的实体类。例如:

@MappedSuperclass
public class Parent implements Serializable {
     @Id
     Long id;
     @Column(name = "foo", required = true)
     String foo;
     @Column(name = "bar", required = false)
     String bar;
     /* ... getters and setters, toString(), etc... */
}
如果确实不想修改超类,可以使用映射文件:

<?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_1_0.xsd" version="1.0">
    <mapped-superclass class="Parent">
        <!-- add your mapping here -->
    </mapped-superclass>
</entity-mappings>


我喜欢你的另一种方法,我会试一试。这正是我想要做的。我为您的
替代方法添加了一个编辑,因为它的工作方式与我所希望的一样。将@MappedSuperclass注释添加到父级不会创建OP试图避免的JPA依赖关系吗?嗯,它确实使JPA API成为编译时依赖关系。但这是不可避免的。我喜欢你的替代方法,我会试一试。这正是我想要做的。我为您的
替代方法添加了一个编辑,因为它的工作方式与我所希望的一样。将@MappedSuperclass注释添加到父级不会创建OP试图避免的JPA依赖关系吗?嗯,它确实使JPA API成为编译时依赖关系。但这是不可避免的。我喜欢你的替代方法,我会试一试。这正是我想要做的。我为您的
替代方法添加了一个编辑,因为它的工作方式与我所希望的一样。将@MappedSuperclass注释添加到父级不会创建OP试图避免的JPA依赖关系吗?嗯,它确实使JPA API成为编译时依赖关系。但这是不可避免的。我喜欢你的替代方法,我会试一试。这正是我想要做的。我为您的
替代方法添加了一个编辑,因为它的工作方式与我所希望的一样。将@MappedSuperclass注释添加到父级不会创建OP试图避免的JPA依赖关系吗?嗯,它确实使JPA API成为编译时依赖关系。但是这是不可避免的。不完全可以,我可以使用AttributeOverrides和AssociationOverrides.errm不,如果不将父类作为实体,则不能使用AttributeOverrides等,并且只能通过向父类添加注释(您不想这样做),或者你使用这个答案所说的XML,所以不知道为什么有人否决了它。不完全是这样,我可以使用AttributeOverrides和AssociationOverrides.errm不你不能使用AttributeOverrides等而不使父类成为一个实体,你只能通过向父类添加注释(你不想这样做),或者你使用这个答案所说的XML,所以不知道为什么有人否决了它。不完全是这样,我可以使用AttributeOverrides和AssociationOverrides.errm不你不能使用AttributeOverrides等而不使父类成为一个实体,你只能通过向父类添加注释(你不想这样做),或者你使用这个答案所说的XML,所以不知道为什么有人否决了它。不完全是这样,我可以使用AttributeOverrides和AssociationOverrides.errm不你不能使用AttributeOverrides等而不使父类成为一个实体,你只能通过向父类添加注释(你不想这样做),或者像这个答案所说的那样使用XML,所以不知道为什么有人否决了它。