Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/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
Java 带继承的JPA注释_Java_Hibernate_Jpa - Fatal编程技术网

Java 带继承的JPA注释

Java 带继承的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

我正在进行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;

}

@实体
公共类负责人扩展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,它将不是双向链接,对吗?对不起,我不认为这是可选的,我的错,你必须指定关系的所有者,我编辑了我的答案。