hibernate
엔티티 간의 연관 매핑
수색…
OneToMany 협회
관계 OneToMany를 설명하기 위해 우리는 국가와 도시와 같은 2 개의 엔티티가 필요합니다. 한 국가에는 여러 개의 도시가 있습니다.
아래 CountryEntity에서 국가에 대한 도시 집합을 정의합니다.
@Entity
@Table(name = "Country")
public class CountryEntity implements Serializable
{
private static final long serialVersionUID = 1L;
@Id
@Column(name = "COUNTRY_ID", unique = true, nullable = false)
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Integer countryId;
@Column(name = "COUNTRY_NAME", unique = true, nullable = false, length = 100)
private String countryName;
@OneToMany(mappedBy="country", fetch=FetchType.LAZY)
private Set<CityEntity> cities = new HashSet<>();
//Getters and Setters are not shown
}
이제 도시 엔티티.
@Entity
@Table(name = "City")
public class CityEntity implements Serializable
{
private static final long serialVersionUID = 1L;
@Id
@Column(name = "CITY_ID", unique = true, nullable = false)
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Integer cityId;
@Column(name = "CITY_NAME", unique = false, nullable = false, length = 100)
private String cityName;
@ManyToOne(optional=false, fetch=FetchType.EAGER)
@JoinColumn(name="COUNTRY_ID", nullable=false)
private CountryEntity country;
//Getters and Setters are not shown
}
XML을 사용하는 일대 다 (one to many) 연관
이것은 XML을 사용하여 일대 다 매핑을 수행하는 방법의 예입니다. 저자와 책을 예제로 사용하고 저자가 많은 책을 썼다고 가정하지만 각 책에는 저자가 하나뿐입니다.
작성자 클래스 :
public class Author {
private int id;
private String firstName;
private String lastName;
public Author(){
}
public int getId(){
return id;
}
public void setId(int id){
this.id = id;
}
public String getFirstName(){
return firstName;
}
public void setFirstName(String firstName){
this.firstName = firstName;
}
public String getLastName(){
return lastName;
}
public void setLastName(String lastName){
this.lastName = lastName;
}
}
책 클래스 :
public class Book {
private int id;
private String isbn;
private String title;
private Author author;
private String publisher;
public Book() {
super();
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getIsbn() {
return isbn;
}
public void setIsbn(String isbn) {
this.isbn = isbn;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public Author getAuthor() {
return author;
}
public void setAuthor(Author author) {
this.author = author;
}
public String getPublisher() {
return publisher;
}
public void setPublisher(String publisher) {
this.publisher = publisher;
}
}
Author.hbm.xml :
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping>
<class name="Author" table="author">
<meta attribute="class-description">
This class contains the author's information.
</meta>
<id name="id" type="int" column="author_id">
<generator class="native"/>
</id>
<property name="firstName" column="first_name" type="string"/>
<property name="lastName" column="last_name" type="string"/>
</class>
</hibernate-mapping>
Book.hbm.xml :
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping>
<class name="Book" table="book_title">
<meta attribute="class-description">
This class contains the book information.
</meta>
<id name="id" type="int" column="book_id">
<generator class="native"/>
</id>
<property name="isbn" column="isbn" type="string"/>
<property name="title" column="title" type="string"/>
<many-to-one name="author" class="Author" cascade="all">
<column name="author"></column>
</many-to-one>
<property name="publisher" column="publisher" type="string"/>
</class>
</hibernate-mapping>
일대 다 연결을 만드는 이유는 Book 클래스에 Author가 포함되어 있고 XML에 <many-to-one> 태그가 있기 때문입니다. cascade 속성을 사용하면 하위 항목을 저장 / 업데이트하는 방법을 설정할 수 있습니다.
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow