2012-07-16 66 views
3

一个关系我有一个包含关于...的交易信息的事务表,有些交易是从以前的交易得到的,这样可以有一个交易之间的一个关系。Hibernate的一个相同的对象

我试图建立标注在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; 
    } 

} 

下面是代码的例子,所以你会明白的地方,我有这个打算......关于如何建立这种关系的任何想法?

回答

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。另外,您可能希望为列设置独特的限制。

为了使上述双向one-to-一项所述关系,只需添加以下(无需其它修改):

private Transaction child; 

@OneToOne(mappedBy = "parent") 
public Transaction getChild() { 
    return parent; 
} 
public void setChild(Transaction child) { 
    this.child = child; 
} 
0

假设你已经在你的交易表的外键列“derived_id”,您可以指定连接列

@Entity 
public class Transaction 
{ 
    @OneToOne 
    @JoinColumn(name = "derived_id", nullable = true) 
    private Transaction derivedFrom; 
} 
相关问题