2015-05-19 37 views
1

我想将现有的JPA实体拆分为POJO超类和实体子类。我想把POJO超类放到一个库项目中,这个项目可以被其他项目引用,但不使用JPA。如何在实体的子类中设置“mappedBy”?

我的旧/现有的代码成功申报这样的一对多关系:

@Entity 
public class Person { 
    @OneToMany(mappedBy="petOwner") 
    public List<Pet> pets = new ArrayList<>(); 
} 

我想将它拆分成这个超:

public class CommonPerson { 
    public List<Pet> pets = new ArrayList<>(); 
} 

问题:怎么可能适当jpa子类的样子?我可以在子类中设置mappedBy吗?

我的尝试:

@Entity 
// not possible: @AttributeOverride (has no "mappedBy" or "OneToMany") 
// not possible: @AssociationOverride (has no "mappedBy" or "OneToMany") 
public class JpaPerson extends CommonPerson { 
} 

我使用Hibernate的JPA API 2.1。

+1

从来没有尝试过,但它应该工作,如果你重写getter并注释。 –

+1

请记住,如果您计划混合字段和属性访问类型,则需要指定使用@Access注释。 –

回答

0

谢谢@ petros-splinakis!

我现在用的是这样的:

@Entity 
@Access(AccessType.PROPERTY) 
public class JpaPerson extends CommonPerson { 

    @OneToMany(mappedBy="petOwner") 
    public List<Pet> getPets() { 
     return pets; 
    } 

    public void setPets(List<Pet> pets) { 
     this.pets = pets; 
    } 

} 

它就像一个魅力!

0

如果在MappedSuperclass方法中使用@Transient注释,则可以在同一方法的子类中使用任何其他JPA注释。因此,您可以'扩展'子类中的JPA注释。

相关问题