3

我有一个事务表,其中包含有关...事务的信息,一些事务是从以前的事务派生的,因此事务之间可以存在一对一的关系。

我试图在休眠中设置注释来创建这个数据结构,但我无法弄清楚或找到如何去做。

@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;
    }

}

这是一个代码示例,因此您将了解我要处理的内容...有关如何设置此关系的任何想法?

4

2 回答 2

4

它不起作用,因为

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;
    }
}

关系默认保留为 column name parent_transactionid,这当然可以通过@JoinColum更改。此外,您可能希望为列设置唯一约束。

要建立上述双向一对一的关系,只需添加以下内容(无需其他修改):

private Transaction child;

@OneToOne(mappedBy = "parent")
public Transaction getChild() {
    return parent;
}
public void setChild(Transaction child) {
    this.child = child;
}
于 2012-07-16T15:09:40.617 回答
1

假设您的事务表中有一个外键列“derived_id”,您可以指定连接列

 @Entity
 public class Transaction 
 {
    @OneToOne
    @JoinColumn(name = "derived_id", nullable = true)
    private Transaction derivedFrom;
 }
于 2012-07-16T14:54:56.790 回答