반응형
@OneToOne 양방향 매핑 주키(PK)공유
두테이블에서 같은 키를 PK로 이용한다.
A -> PK -> B -> FK,PK
*부모객체
메인객체 @OneToOne 선언
영속상태 정의
부모객체에 양방향 매핑의 mappedBy를 설정하여 외례키 컬럼이 생성되지 않도록 한다.
@Entity
@JsonIgnoreProperties(ignoreUnknown = true)
public class Users implements Serializable {
@Id
private String email;
@OneToOne(mappedBy = "users"
, cascade = {
CascadeType.PERSIST
,CascadeType.MERGE
, CascadeType.REMOVE // 사용자 삭제시 FCM Key 함께 삭제
}
)
private JgFCMKeyManager jgFCMKeyManager;
}
*1:1 매핑 서브객체
서브객체 OneToOne 선언
@MapsId 로 메인객체의 @Id 를 참조함 @JoinColumn 으로 명시
@Entity
public class JgFCMKeyManager {
@Id
private String email;
@MapsId
@OneToOne(cascade = {CascadeType.PERSIST ,CascadeType.MERGE})
@JoinColumn(name = "email")
private Users users;
}
저장 및 삭제 샘플
MapsId와 JoinColumn 을 이용하여 FK,PK를 하나의 것으로 사용한다.
저장삭제시 유의사항으로 DB에 추가삭제시 부모 자식 모두 setAttribute(....)을 해주어야 한다.
주키를 공유하기 위해 만들어둔 @Id email 도 키 값을 set(...) 해주어야한다.
@ApiOperation(value = "FCM 사용자별 TOKEN 저장" , httpMethod = "POST")
@ApiImplicitParams(
value = {
@ApiImplicitParam(name = "email" , value = "" , paramType = "query")
,@ApiImplicitParam(name = "token" , value = "" , paramType = "query")
}
)
@RequestMapping(value = "/api/fcmKeyManager/save" , method = RequestMethod.POST)
public void fcmKeyManagerSave(JgFCMKeyManager jgFCMKeyManager) throws Exception{ {
Users user = new Users();
user.setUserId("123123123");
user.setUserName("username");
user.setBirthDate("18921213");
user.setCellPhone("11111111111");
user.setPassword("123123123");
jgFCMKeyManager.setToken("41234234sd1111d");
// 양쪽다 주입
jgFCMKeyManager.setUsers(user);
user.setJgFCMKeyManager(jgFCMKeyManager);
this.userJpaRepository.save(user);
//this.fcmKeyManagerJpaRepository.save(jgFCMKeyManager);
//this.fcmKeyManagerJpaRepository.delete(jgFCMKeyManager);
//this.userJpaRepository.delete(user);
}
@ApiOperation(value = "FCM TOKEN 삭제" , httpMethod = "DELETE")
@ApiImplicitParams(
value = {
@ApiImplicitParam(name = "key" , value = "사용자 아이디 키" , paramType = "query")
}
)
@RequestMapping(value = "/api/fcmKeyManager/delete/{key}/" , method = RequestMethod.DELETE)
public void fcmKeyDelete(@PathVariable String key) throws Exception{
JgFCMKeyManager jgFCMKeyManager = new JgFCMKeyManager();
jgFCMKeyManager.setEmail(key);
jgFCMKeyManager.setUsers(new Users(key));
this.fcmKeyManagerJpaRepository.delete(jgFCMKeyManager);
}
반응형
'Spring > Spring Data JPA' 카테고리의 다른 글
JPA Hibernate Bulk Save , Multi save (0) | 2019.01.03 |
---|---|
JPA Hibernate Multi PK 주의점 (정적 내부 클레스) (0) | 2018.10.08 |
Jpa JSON 순환참조 @ResponseBody (0) | 2017.09.21 |
JPA foreign key 생성(@MapsId @ManyToOne) (0) | 2016.11.29 |
Spring JPA QueryMethod(findBy...deleteBy) (0) | 2016.10.27 |