TIL
오늘 배운 것
JPA 기본 키 생성전략
Babsim BE 작업중.
@Entity
@Table(name = "users")
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class User extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.UUID)
@JdbcTypeCode(SqlTypes.CHAR)
@Column(length = 36, nullable = false, updatable = false)
private UUID id;
스키마를 AI에게 제시하니까, 위와 같이 만들었음. 처음에는
@GeneratedValue(generator=”uuid2”)
@GenericGenerator(name=”uuid2”,strategy=”uuid2”)
이렇게 했는데, hibernate 6.XX 부터는 위와 같이 바뀌었음. (@GeneratedValue(strategy = GenerationType.UUID))
https://0soo.tistory.com/178
한편 JdbcTypeCode는 Java의 UUID를 DB에서 CHAR 자료형으료 변환하겠다는 명시적 매핑을 나타낸다.
그 아래 @Column은 길이 36으로 표준 UUID구조(8-4-4-4-12) 에 PK니까 nullable, PK를 변하지 않게 updatable=false설정했다.
User 도메인 설정상 전략을 UUID로 했다.
@Entity
@Table(name = "health_conditions")
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class HealthCondition {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false, length = 100)
private String name;
@Enumerated(EnumType.STRING)
@Column(nullable = false)
private HealthConditionType type;
---
@Entity @Table(
name = "user_health_conditions",
uniqueConstraints = @UniqueConstraint(name="uq_user_health", columnNames={"userId","healthConditionId"})
)
@Getter
@NoArgsConstructor(access = PROTECTED)
public class UserHealthCondition {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "userId", nullable = false)
private User user;
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "healthConditionId", nullable = false)
private HealthCondition healthCondition;
ID전략은 쉽게 Identity로 했다. 우리가 사용할 MySQL에선 Auto increment로 된다. 한가지 특징은 Data를 DB에 Insert 한 후 PK조회가 가능하다.
https://velog.io/@gillog/JPA-%EA%B8%B0%EB%B3%B8-%ED%82%A4-%EC%83%9D%EC%84%B1-%EC%A0%84%EB%9E%B5IDENTITY-SEQUENCE-TABLE