반응형
JPA에서 복합 프라이머리 키를 만들고 처리하는 방법
같은 데이터 엔트리의 버전을 원합니다.즉, 다른 버전 번호로 엔트리를 복제하고 싶습니다.
id - Version
이 프라이머리 키가 됩니다.
엔티티는 어떻게 보여야 합니까?다른 버전으로 복제하려면 어떻게 해야 하나요?
id Version ColumnA
1 0 Some data
1 1 Some Other data
2 0 Data 2. Entry
2 1 Data
만들 수 있습니다.Embedded class
2개의 키가 저장되어 그 클래스가 참조됩니다.EmbeddedId
당신의 안에서Entity
.
및 주석이 필요합니다.
@Entity
public class YourEntity {
@EmbeddedId
private MyKey myKey;
@Column(name = "ColumnA")
private String columnA;
/** Your getters and setters **/
}
@Embeddable
public class MyKey implements Serializable {
@Column(name = "Id", nullable = false)
private int id;
@Column(name = "Version", nullable = false)
private int version;
/** getters and setters **/
}
이 작업을 수행하는 또 다른 방법은@IdClass
주석을 붙입니다.id
그런 점에서IdClass
. 이제 일반을 사용할 수 있습니다.@Id
두 속성에 대한 주석
@Entity
@IdClass(MyKey.class)
public class YourEntity {
@Id
private int id;
@Id
private int version;
}
public class MyKey implements Serializable {
private int id;
private int version;
}
MyKey 클래스는 구현해야 합니다.Serializable
사용하시는 경우@IdClass
키 클래스:
@Embeddable
@Access (AccessType.FIELD)
public class EntryKey implements Serializable {
public EntryKey() {
}
public EntryKey(final Long id, final Long version) {
this.id = id;
this.version = version;
}
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id = id;
}
public Long getVersion() {
return this.version;
}
public void setVersion(Long version) {
this.version = version;
}
public boolean equals(Object other) {
if (this == other)
return true;
if (!(other instanceof EntryKey))
return false;
EntryKey castOther = (EntryKey) other;
return id.equals(castOther.id) && version.equals(castOther.version);
}
public int hashCode() {
final int prime = 31;
int hash = 17;
hash = hash * prime + this.id.hashCode();
hash = hash * prime + this.version.hashCode();
return hash;
}
@Column (name = "ID")
private Long id;
@Column (name = "VERSION")
private Long operatorId;
}
엔티티 클래스:
@Entity
@Table (name = "YOUR_TABLE_NAME")
public class Entry implements Serializable {
@EmbeddedId
public EntryKey getKey() {
return this.key;
}
public void setKey(EntryKey id) {
this.id = id;
}
...
private EntryKey key;
...
}
다른 버전과 복제하려면 어떻게 해야 합니까?
제공자에서 검색한 엔티티를 분리하고 Entry 키를 변경한 다음 새 엔티티로 유지할 수 있습니다.
MyKey 클래스(@Embeddable)는 @ManyToOne과 같은 관계를 가질 수 없습니다.
언급URL : https://stackoverflow.com/questions/13032948/how-to-create-and-handle-composite-primary-key-in-jpa
반응형
'source' 카테고리의 다른 글
대문자 및 숫자를 사용한 랜덤 문자열 생성 (0) | 2022.09.27 |
---|---|
php에서 변수로 이름 붙여진 오브젝트 속성에 어떻게 접근할 수 있나요? (0) | 2022.09.27 |
MariaDB/MySQL 복합 고유 인덱스가 유효하지 않습니다. (0) | 2022.09.25 |
타입에 따라 포인터의 사이즈가 다른 플랫폼이 있나요? (1) | 2022.09.25 |
JavaScript %(modulo)는 음수에 대해 음의 결과를 제공합니다. (0) | 2022.09.25 |