2012-01-11 50 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