Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • ManyToOne : 다대일 관계 매칭정보
  • JoinColumn : 외래키를 매핑때 사용함
  • mappedBy : 연관관계설정시 주인이 아님을 설정
  • OneToMany : 일대다 관계 매핑정보
  • OneToOne : 일대일 관계 매칭정보, 어느곳이나 외래키를 가짐
  • ManyToMany : 다대다 관계매칭정보, 맵핑테이블을 만들어서 사용하기를 권장
  • 연관관계주인 : 외래키가 있는곳이 주인이며 주인만이 수정가능 아닌경우 조회만가능


ManyToOne ( 다대일

...

)

위 샘플에서 사용자(User) 데이터 모델링에서,  사용자가 속한 그룹모델링을 구현해보겠습니다그룹을 표한하는 테이블을 추가해보겠습니다.

여러명의 사용자는 한개의 그룹에 속할수 있기때문에, 사용자의 입장에서 다대일 입니다.

즉 사용자의 모델링에서만.., 다대일 설정을 그룹 정보와 맺어주면됩니다.


Image Added

우리가 원하는 테이블 모델링은 위와같을 것이며, SQL문 없이  JPA를 이용해서만 작성할것입니다.모습이며, user테이블에 group_id가 외래키로 설정이 되어있습니다.

어플리케이션에서 레거시한 제어를 모두한다고 하면, 이러한 외래키 설정이 필요없을수도 있으나

데이터 무결성의 입장에서 중요한 설정이며, JPA 사용시 외래키를 직접 지정하지는 않지만 

JPA에서 Relation을 사용하면, 상황에따라 외래키설정이 자동으로 됩니다. 


Code Block
languagejavasql
themeEmacs
titleGroupInfo 새롭게 정의SQL문으로 표현했을시
collapsetrue
@Entity
publicCREATE classTABLE GroupInfo`user` {(
	@Id
  `user_id`  @GeneratedValue
	@Column(name = "GROUP_ID")int(11) NOT NULL AUTO_INCREMENT,
  `email`  private Integer id;varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `name` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `group_id` int(11) private String name;DEFAULT NULL,
  PRIMARY KEY 

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	

}

(`user_id`),
  KEY `FKa36i4ekojwk70bxen390i6tek` (`group_id`),
  CONSTRAINT `FKa36i4ekojwk70bxen390i6tek` FOREIGN KEY (`group_id`) REFERENCES `group_info` (`group_id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;


JPA에서 정의

Code Block
languagejava
themeEmacs
title사용자 모델링에 다대일 설정GroupInfo 새롭게 정의
collapsetrue
@Entity
public class UserGroupInfo {
	@Id
    @GeneratedValue
    	@Column(name = "USERGROUP_ID")
    private Integer id;

	private String name;

	private String email;
 
	@ManyToOne
	@JoinColumn(name = "GROUP_ID")
    private GroupInfoString groupInfoname;

    
    public GroupInfo
}

Code Block
languagejava
themeEmacs
title사용자 모델링에 다대일 설정
collapsetrue
@Entity
public class User getGroupInfo() {
		return groupInfo;
	}

	public void setGroupInfo(GroupInfo groupInfo) {
		this.groupInfo = groupInfo;
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}
	

	
@Id
    @GeneratedValue
    @Column(name = "USER_ID")
    private Integer id;

	private String name;

	private String email;
 
	@ManyToOne
	@JoinColumn(name = "GROUP_ID")
    private GroupInfo groupInfo;	
}

Code Block
languagejava
themeEmacs
titletest
collapsetrue
GroupInfo newGroup = new GroupInfo();
newGroup.setName("학생");
groupRepository.save(newGroup);
 
// 사용자 생성
User addUser = new User();
addUser.setName("minsu");
addUser.setEmail("test@x.com");
addUser.setGroupInfo(newGroup); 

userRepository.save(addUser);
 
// 사용자 조회
Iterable<User> userList = userRepository.findAll(); 
userList.forEach(item->System.out.println(item.getName() ));



OneToMany

Image Added



Info

다른 진영(.net) 에서도 JPA와 유사하게 데이터를 제어하고 있습니다.

Entity Framework

https://docs.microsoft.com/en-us/ef/core/

...