목차

JPA One-To-One

Primary Key 기반 One-To-One JPA 2 방식

Primary Key 기반 One-To-One JPA 1 방식

// 부모측
@Id
@Column(name="id")
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
 
@OneToOne(cascade = CascadeType.ALL, mappedBy="parent")
@PrimaryKeyJoinColumn
private Child child;
// 자식측
@Id
@GenericGenerator(name = "foreign_one_to_one_generator", strategy = "foreign", parameters = @Parameter(name = "property", value = "parent"))
@GeneratedValue(generator = "foreign_one_to_one_generator")
@Column(name = "parent_id")
private Long id;
 
@OneToOne(fetch = FetchType.LAZY)
@PrimaryKeyJoinColumn(name = "parent_id", referencedColumnName = "id")
private Parent parent;

One-To-One 과 Lazy Loading

게시판 형태에서 게시글에 대해 @ElementCollection을 사용한 LazyLoading 구현

// Article 이라는 엔티티의 내용(content)를 LazyLoading하는 예제이다.
 
@ElementCollection(fetch = FetchType.LAZY)
@CollectionTable(name = "article_content_holder", joinColumns = @JoinColumn(name = "article_id", unique = true))
@org.hibernate.annotations.ForeignKey(name="fk_article_content_holder_id")
@Column(name = "content", length = 1024)
private List<String> contentHolder;
 
public void setContent(String content) {
	if (getContentHolder() == null) {
		setContentHolder(new ArrayList<String>());
	}
 
	getContentHolder().clear();
	getContentHolder().add(content);
}
 
public String getContent() {
	if (getContentHolder() == null || getContentHolder().size() == 0) {
		return null;
	}
	return getContentHolder().get(0);
}

게시판 형태에서 게시글에 대해 One-To-One LazyLoading 구현