我有一个事务表,其中包含有关...事务的信息,某些事务是从先前的事务派生的,因此事务之间可以存在一对一的关系。
我正在尝试在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;
}
}
这是一个代码示例,这样您就可以理解我的目标......如何设置这种关系?
答案 0 :(得分:3)
由于
,它不起作用mappedBy="transaction"
在关系的另一端调用双向关系和属性名称事务。正如您从代码中看到的那样,您没有这样的属性。
如果您希望从子级到父级的单向一对一,则可以使用以下方法:
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;
}
答案 1 :(得分:0)
假设您有一个外键列" derived_id"在您的交易表中,您可以指定加入列
@Entity
public class Transaction
{
@OneToOne
@JoinColumn(name = "derived_id", nullable = true)
private Transaction derivedFrom;
}