2012-01-11 48 views
0

大家好我有一個小問題,使用JPA 2持久性與EclipseLink供應商進行一對一映射,也許你們中的任何人都可以提供幫助。NullPointerException @一對一映射

我想映射一個表與另一個表,但第二個表中的字段是可選的。所以我創建@Entity第一個表:

放大器類

private AmpApInfo ampApInfo; 
private String apid; 


    @Id 
@GeneratedValue(strategy=GenerationType.AUTO) 
public String getApid() { 
    return this.apid; 
} 


public void setApid(String apid) { 
    this.apid = apid; 
} 

    @OneToOne 
@JoinColumn(name="apid") 
public AmpApInfo getAmpApInfo() { 

     return this.ampApInfo; 

} 

public void setAmpApInfo(AmpApInfo ampApInfo) { 
    this.ampApInfo = ampApInfo; 
} 

和@Entity第二個表格

AmpApInfo類

private String apid; 
private Amp amp; 
    private String prodOrderNo; 

public AmpApInfo() { 
} 



@OneToOne(optional=true, mappedBy="ampApInfo") 
public Amp getAmp() { 
    return this.amp; 
} 

public void setAmp(Amp amp) { 
    this.amp = amp; 
} 

    @Id 
public String getApid() { 
    return apid; 
} 
public void setApid(String apid) { 
    this.apid = apid; 
} 

     @Column(name="prod_order_no") 
public String getProdOrderNo() { 
    return this.prodOrderNo; 
} 

public void setProdOrderNo(String prodOrderNo) { 
    this.prodOrderNo = prodOrderNo; 
} 

現在,當我想find prodOrderNo like

public Amp selectProdInfo(String name) { 
    // TODO Auto-generated method stub 


    Amp amp = Transactions.getEntityManager().find(Amp.class, name.trim()); 

    System.out.println("order number" + amp.getAmpApInfo().getProdOrderNo()); 

    return amp; 
} 

我期待得到空COS它不存在,但我上線

System.out.println("order number" + amp.getAmpApInfo().getProdOrderNo()); 

任何一個可以幫助越來越顯示java.lang.NullPointerException ???

回答

1

amp是null或amp.getAmpApInfo()返回null,並且您試圖調用它們的方法。

+0

我知道amp.getAmpApInfo()是null,但是持久性應該用null值填充AmpApInfo? – user1048282 2012-01-11 17:01:51

+0

您是否插入了AmpApInfo條目?這是一個可選的映射,所以如果數據庫中沒有相應的條目,您應該期望Amp具有空引用。 – Theblacknight 2012-01-12 09:52:14

+0

非常感謝:] – user1048282 2012-01-24 11:25:49