답변:
당신은 할 수 있습니다 Embedded class
당신이 키를 포함하는, 다음으로 그 클래스에 대한 참조가 EmbeddedId
귀하의에서 Entity
.
@EmbeddedId
및 @Embeddable
주석 이 필요합니다 .
@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;
}
@Generatedvalue
ID를 EmbeddedId에 의해
@GeneratedValue
기본 키에 대한 키 값을 생성하는 데만 사용할 수 있으며 복합 키에 대한 조합을 생성 할 수 없습니다.
주요 클래스 :
@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의 키를 변경 한 다음 새 엔티티로 유지할 수 있습니다.
AUTOGENERATED
. 그런 데르 일 @GeneratedValue(strategy = GenerationType.IDENTITY)
hash
와 prime
방법 hashCode
클래스에서 EntryKey
그 아이디어가 어디에서 오는지, 당신이 나를 알 수 있습니까?
@IdClass
주석을 사용할 때 내가 찾은 또 다른 팁은@Column
주석이 Entity 클래스의 필드 (YourEntity
RohitJan의 샘플 코드에 있음) 로 이동해야한다는 것 입니다.