Hibernate通用复合密钥和级联保存

Hibernate通用复合密钥和级联保存,hibernate,composite-key,hibernate-cascade,Hibernate,Composite Key,Hibernate Cascade,我在为我在数据库中使用的复合键编写泛型类时遇到问题。 所有使用复合键的表都具有关系manytone并使用2 FK。我在课堂上写了以下内容: import java.io.Serializable; import javax.persistence.Embeddable; import javax.persistence.ManyToOne; @Embeddable public class CompositeKey<K, T> implements Serializable {

我在为我在数据库中使用的复合键编写泛型类时遇到问题。 所有使用复合键的表都具有关系manytone并使用2 FK。我在课堂上写了以下内容:

import java.io.Serializable;

import javax.persistence.Embeddable;
import javax.persistence.ManyToOne;

@Embeddable
public class CompositeKey<K, T> implements Serializable {
@ManyToOne
K firstKey;
@ManyToOne
T secondKey;

public CompositeKey() {
}

public CompositeKey(K firstKey, T secondKey) {
    this.firstKey = firstKey;
    this.secondKey = secondKey;
}

public K getFirstKey() {
    return firstKey;
}

public void setFirstKey(K firstKey) {
    this.firstKey = firstKey;
}

public T getSecondKey() {
    return secondKey;
}

public void setSecondKey(T secondKey) {
    this.secondKey = secondKey;
}

@Override
public String toString() {
    return "CompositeKey [firstKey=" + firstKey + ", secondKey="
            + secondKey + "]";
}

@Override
public int hashCode() {
    /* HashCode implementation */
}

@Override
public boolean equals(Object obj) {
           /* */
}

}
import java.io.Serializable;
导入javax.persistence.embeddeble;
导入javax.persistence.manytone;
@可嵌入
公共类CompositeKey实现可序列化{
@许多酮
K第一键;
@许多酮
T第二键;
公共合成键(){
}
公共复合键(K第一键,T第二键){
this.firstKey=firstKey;
this.secondKey=secondKey;
}
公共K getFirstKey(){
返回firstKey;
}
public void setFirstKey(K firstKey){
this.firstKey=firstKey;
}
公共T getSecondKey(){
返回第二个键;
}
公共无效设置secondKey(T secondKey){
this.secondKey=secondKey;
}
@凌驾
公共字符串toString(){
return“CompositeKey[firstKey=“+firstKey+”,secondKey=”
+secondKey+“]”;
}
@凌驾
公共int hashCode(){
/*哈希代码实现*/
}
@凌驾
公共布尔等于(对象obj){
/* */
}
}
以及使用CompositeKey的示例类:

import javax.persistence.AssociationOverride;
import javax.persistence.AssociationOverrides;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.Lob;



@Entity
public class TestClass {

@EmbeddedId
@AssociationOverrides({
        @AssociationOverride(name = "firstKey", joinColumns = @JoinColumn(name = "FirstTable")),
        @AssociationOverride(name = "secondKey", joinColumns = @JoinColumn(name = "SecondTable")) })
private CompositeKey<A, B> compositeKey;

@Lob
private String description;

    /* Getters and Setters */


    }
import javax.persistence.AssociationOverride;
导入javax.persistence.AssociationOverrides;
导入javax.persistence.EmbeddedId;
导入javax.persistence.Entity;
导入javax.persistence.JoinColumn;
导入javax.persistence.Lob;
@实体
公共类TestClass{
@嵌入ID
@联想超越({
@AssociationOverride(name=“firstKey”,joinColumns=@JoinColumn(name=“FirstTable”),
@AssociationOverride(name=“secondKey”,joinColumns=@JoinColumn(name=“SecondTable”))}
私人复合基复合基;
@高球
私有字符串描述;
/*接球手和接球手*/
}
现在是问题:
1.这种方法正确吗?或者最好为每个实体编写单独的复合键
2.如果这种方法是正确的,那么如何将annonation@ManyToOne从CompositeKey类移动到TestClass
3.在这种情况下可以使用级联吗?我想在保存具有组合键的实体时保存组合键中的实体

提前感谢您的回复