我有2张桌子PERSON和CARD

我希望我的表CARD具有PERSON_ID作为FK,我应该如何在休眠实体类中进行操作。



有没有一种方法可以通过Java类和注释来实现?

我的个人实体班

package com.managementsystem.model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity(name="PERSON")
public class Person {

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

    private String name;
    private String card_no;
    private String rank;
    private String dte;

    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getCard_no() {
        return card_no;
    }
    public void setCard_no(String card_no) {
        this.card_no = card_no;
    }
    public String getRank() {
        return rank;
    }
    public void setRank(String rank) {
        this.rank = rank;
    }
    public String getDte() {
        return dte;
    }
    public void setDte(String dte) {
        this.dte = dte;
    }

}


我的卡实体类

package com.managementsystem.model;

import javax.persistence.Entity;
import javax.persistence.Id;


@Entity(name="CARD")
public class Card {

    @Id
    private int id;

    //What to do here, how to link this to person id.
    private int person_id;
    private int serial_no;

    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public int getPerson_id() {
        return person_id;
    }
    public void setPerson_id(int person_id) {
        this.person_id = person_id;
    }
    public int getSerial_no() {
        return serial_no;
    }
    public void setSerial_no(int serial_no) {
        this.serial_no = serial_no;
    }


}


在卡类中该怎么做,以便我可以在卡表中输入person_id。

最佳答案

Person中,您想使用Card属性来维护card_no信息;在Card实体中,您想要具有person_id属性。因此,您正在寻找的是双向关系。假设您要查找One-To-Many双向关系,则PersonCard实体之间的映射如下。

一个Person可以有多个Cards,因此您需要在Person类中设置一个。映射是OneToMany,因此请使用@OneToManymappedBy属性告诉Card类中的哪个属性表示Person实体。我在person类中使用了属性名称Card,因此mappedBy包含值为person

@Entity(name="PERSON")
public class Person {
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private int id;

    @OneToMany(mappedBy = "person")
    private Set<Card> cards;
}


现在在Card类中,对ManyToOne类的关系是Person,因此使用注释@ManyToOne,在这里您可以指定Card表中指向主键的外键的名称是什么。 Person表。在这里,我们可以给外键起任何名字,如果要给它起"parent_id的名字,请添加注释@JoinColumn(name = "parent_id")

@Entity(name="CARD")
public class Card {
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private int id;

    @ManyToOne
    @JoinColumn(name = "parent_id")
    private Person person;
}

关于java - Hibernate插入表ID作为另一个表中的外键,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26031199/

10-12 02:54
查看更多