У меня есть 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
сопоставление между объектами 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;
}
Прочтите документы: 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;