2015-07-13 95 views
1

我正在JPA项目上工作,我需要你的帮助。JPA注释与继承

我有两个类,“Person”和“Leader”从Person继承而来。

@Entity 
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)  
public class Person implements Serializable { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 


    @Column(unique = true)  
    private String personId; 

} 

而且

@Entity 
public class Leader extends Person implements Serializable { 

    private List <Person> listTeam; 

    public void addPersonInTeam(Person e) { 

     listTeam.add(e); 
    } 
} 

我的问题是,我需要有JPA批注@OneToMany或之前班长私人列表listTeam其他什么东西?

非常感谢您

+0

我建议阅读这个http://stackoverflow.com/questions/2883033/is-it-possible-to-add-jpa-annotation-to-superclass-instance-variables,因为我看到更多的问题比列表中缺少注释。如果没有帮助,请留言。 –

+0

你的意思是说我需要把Person作为抽象的东西吗?或添加@MappedSuperClass?但在这种情况下,人将不会持续,虽然我需要持久。非常感谢您的帮助。 – TER

+3

是的,当然你需要一个OneToMany或一个ManyToMany注解。 Hibernate不会猜测这个关联是什么。 –

回答

2

你需要指定因为Hibernate的两个类之间的映射的关系是不是与此有关,你必须在双方使用注释,我猜你会在这里需要一个OneToMany映射:

这里是您seraching的映射:

在Person类:

@Entity 
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) 
public class Person implements Serializable { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

    @Column(unique = true) 
    private String personId; 

    @ManyToOne 
    @JoinColumn(name="leader_id") 
    private Leader leader; 
    //getter and setter 

} 

在领袖级:

@Entity 
public class Leader extends Person implements Serializable { 

    @OneToMany(mappedBy = "leader") 
    private List <Person> listTeam; 
    //getter and setter 

    public void addPersonInTeam(Person e) { 
     listTeam.add(e); 
    } 
} 

欲了解更多信息,可以看到这些链接:

注:

我没有看到在Person类使用领域personId的,没有必要到IDS使用两个型动物。

编辑:

回答您的问题:

  1. @JoinColumn(name="leader_id")不是强制性的,但它是用来指定外键的名称。
  2. 如果关系为ManyToManymappedBy属性用于指定关系的所有者,您可以看到this answer以获取更多详细信息。
+0

非常感谢@chsdk,现在更清楚了,但我还有其他问题: 1- @JoinColumn(name =“leader_id”)是强制性的吗?为什么? 2-如果关系是ManyToMany(一个人可以是许多领导者团队的一部分),那么mappedBy方面并不重要?无论是在人员还是领导方面都应该工作(但表现会不一样)对吗? 3-人不是抽象类的事实绝对没问题?非常感谢你 – TER

+0

我编辑了我的答案,看看。 –

+0

非常感谢chsdk,它完全清楚了mappedBy的所有者,但是你说:“如果关系是ManyToMany,mappedBy属性是可选的,”?据我了解,在ManyToMany的情况下,业主的哪一方并不重要,但我需要选择一个方向吗?我的意思是如果我只留下@ManyToMany而不使用mappedBy,它不会是一个双向链接吗? – TER