Hibernate Вставить идентификатор таблицы в качестве внешнего ключа в другую таблицу

1

У меня есть 2 стола PERSON и CARD

Я хочу, чтобы моя таблица CARD имела PERSON_ID как FK, как я предполагаю сделать это в классе сущности гибернации.

Изображение 174551

Есть ли способ сделать это с помощью классов 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 в карточный стол, который требуется.

  • 0
    ПРИЧИНА СКАЧИВАНИЯ И ЗАКРЫТИЯ?
Теги:
hibernate
jpa

2 ответа

2

В Person вы хотите сохранить информацию Card используя свойство card_no а также в объекте Card вы хотите иметь свойство person_id. Так что вы ищете двунаправленные отношения. Предполагая, что вы ищете двунаправленную связь " One-To-Many сопоставление между объектами Person и Card будет следующим.

У Person может быть много Cards поэтому вам нужен набор в классе Person. Отображение - OneToMany, поэтому используйте @OneToMany а атрибут mappedBy сообщает, какое свойство в классе 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 его как "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;
}
0

Прочтите документы: http://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html/ch05.html#d5e3678

Измените строку:

private int person_id;

Для:

@ManyToOne
@JoinColumn(name = "PERSON_ID")
private Person person;
  • 0
    не могли бы вы рассказать немного о непрофессиональном языке? :)
  • 0
    Вы когда-нибудь читали что-нибудь об ORM (объектно-реляционное отображение)?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню