Java 带继承的JPA注释
我正在进行JPA项目,我需要你的帮助 我有两个类,“Person”和“Leader”,它们继承自PersonJava 带继承的JPA注释,java,hibernate,jpa,Java,Hibernate,Jpa,我正在进行JPA项目,我需要你的帮助 我有两个类,“Person”和“Leader”,它们继承自Person @Entity @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) public class Person implements Serializable { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Lo
@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;
}
及
@实体
公共类负责人扩展Person实现可序列化{
私人列表<个人>列表团队;
公共无效地址(个人e){
增加(e);
}
}
我的问题是,在班长的私有列表列表团队之前,我是否需要在@OneToMany或其他地方添加JPA注释
非常感谢您需要指定这两个类之间的映射,因为对于Hibernate,这里的关联不相关,您必须在两侧使用注释,我猜您需要一个
OneToMany
映射:
以下是您正在搜索的映射:
亲临课堂:
@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);
}
}
领导类:
@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实现可序列化{
@OneToMany(mappedBy=“leader”)
私人名单编制小组;
//接二连三
公共无效地址(个人e){
增加(e);
}
}
有关更多信息,请参见以下链接:
@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
,不需要使用两个不同的ID
编辑:
@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);
}
}
回答您的问题:
@JoinColumn(name=“leader\u id”)
不是必需的,但用于指定外键名称manytomy
,则使用mappedBy
属性指定关系的所有者,您可以查看以了解更多详细信息我建议读这篇文章,因为我看到的问题比列表中缺少注释的问题多得多。如果没有帮助,请留下一张便条。你的意思是我需要把人抽象化吗?或者添加@MappedSuperClass?但在这种情况下,人不会坚持,尽管我需要坚持。非常感谢您的帮助。是的,您当然需要一个一个或多个注释。Hibernate猜不出关联对你来说是什么。你确定要扩展吗?也许简单的布尔值
isLeader
就足够了?所以你建议我只有类Person,其中包含布尔值isLeader,如果该类Person不是leader,则列表应该为空?非常感谢@chsdk,现在更清楚了,但我还有其他问题:1-@JoinColumn(name=“leader\u id”)这是强制性的吗?为什么?2-如果关系是多方面的(一个人可以是多个领导团队的一部分),那么地图旁边的地图就不那么重要了?无论是在个人方面还是领导方面都应该工作(但表现会不一样),对吗?3-事实上,人不是抽象类是绝对可以的,对吗?非常非常感谢非常感谢chsdk,关于mappedBy的所有者方面是绝对清楚的,但是您说“如果关系是多个,mappedBy属性是可选的”?据我所知,在许多情况下,哪一方是所有者并不重要,但我需要选择一方,对吗?我的意思是,如果我在两边只留下@manytomy而不使用mappedBy,它将不是双向链接,对吗?对不起,我不认为这是可选的,我的错,你必须指定关系的所有者,我编辑了我的答案。