2010-11-25 60 views
5

我想要在列「vendor」上連接兩個表, 在發票表中,vendor type是integer,在vendor表中,vendor是type varchar(10)。JPA在需要類型轉換的字段上定義關係

是否可以進行類型轉換並且也有關係?

@Entity 
public class Vendor 
{ 
    private String id; 

    @Id(Column="vendor") 
    public String getId(){ ... } 
} 

@Entity 
public class Invoice 
{ 
    private Vendor vendor; 

    @One-to-one 
    public Vendor getVendor() { ... } 
} 

回答

0

也許這可以使用瞬時場

@Entity 
public class Employee { 
    ... 
    private boolean isActive; 
    ... 
    @Transient 
    public boolean getIsActive() { 
     return isActive; 
    } 
    public void setIsActive(boolean isActive) { 
     this.isActive = isActive; 
    } 
    @Basic 
    private String getIsActiveValue() { 
     if (isActive) { 
      return "T"; 
     } else { 
      return "F"; 
     } 
    } 
    private void setIsActiveValue(String isActive) { 
     this.isActive = "T".equals(isActive); 
    } 
} 

http://en.wikibooks.org/wiki/Java_Persistence/Basic_Attributes#Conversion

1

據我所知,使用透視表(你會做代表一個多TO-許多關係)將是正確的做法。

像這樣的東西應該工作:

@Entity 
public class Invoice 
{ 
    @JoinTable(name = "invoice_vendor", joinColumns = { 
     @JoinColumn(name = "invoice", referencedColumnName = "vendor_id")}, inverseJoinColumns = { 
     @JoinColumn(name = "vendor", referencedColumnName = "id")}) 
    @OneToOne 
    private Vendor vendor; 
} 

凡invoice_vendor表中有id列和VENDOR_ID列VARCHAR參考整數ID。

另外我猜測你會想要一個ManyToOne供應商之間的關係,但你寫了一對一,所以我已經離開了這樣。

+0

是的,我想這會的工作,但我不開心有額外的表。我添加賞金的原因實際上是因爲我想在文本字段上進行像AVG()這樣的聚合,並且我認爲這個問題的答案也能解決我的問題。我認爲@Transient會工作,但我仍然需要測試它。謝謝,如果我沒有得到任何更好的答案,我會獎勵你。 – AmanicA 2011-03-19 19:58:53

相關問題