我有一个交易表,其中包含有关...交易的信息,某些交易是从先前的交易派生的,因此交易之间可以存在一对一的关系。
我正在尝试在 hibernate 中设置注释来创建此数据结构,但我无法弄清楚或找到如何做到这一点。
@Entity
@Table(name="transaction")
public class Transaction {
private String transactionid;
private Transaction derivedFrom;
/**
* @return the transactionid
*/
@Id
public String getTransactionid() {
return transactionid;
}
/**
* @param transactionid the transactionid to set
*/
public void setTransactionid(String transactionid) {
this.transactionid = transactionid;
}
@OneToOne(mappedBy = "transaction", cascade = CascadeType.ALL)
public Transaction getDerivedFrom() {
return derivedFrom;
}
public void setDerivedFrom(Transaction derivedFrom) {
this.derivedFrom = derivedFrom;
}
}
这是一个代码示例,以便您了解我的意图...关于如何建立这种关系有什么想法吗?
最佳答案
它不起作用,因为
mappedBy="transaction"
在关系的另一端调用双向关系和属性名称事务。正如您从代码中看到的,您没有这样的属性。
如果您想要从 child 到 parent 的单向一对一,可以采用以下方法:
public class Transaction {
private String transactionid;
private Transaction parent;
@Id
public String getTransactionid() {
return transactionid;
}
public void setTransactionid(String transactionid) {
this.transactionid = transactionid;
}
@OneToOne
public Transaction getParent() {
return parent;
}
public void setParent(Transaction parent) {
this.parent = parent;
}
}
关系默认保存到列名parent_transactionid
,这当然可以通过 @JoinColum 进行更改。此外,您可能希望为列设置唯一的约束。
要使上述关系成为双向一对一,只需添加以下内容(无需其他修改):
private Transaction child;
@OneToOne(mappedBy = "parent")
public Transaction getChild() {
return parent;
}
public void setChild(Transaction child) {
this.child = child;
}
关于Hibernate 对同一对象的一对一关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11505063/