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

results matching ""

    No results matching ""