Hibernate:如何使用不是外键的列连接表

时间:2017-08-01 08:32:10

标签: java sql-server database hibernate

我正在尝试使用tartikel中的主键kArtikel在tartikel和teigenschaft之间创建一个OneToOne关系。 TArtikelEntity中的代码片段:

@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumn(name = "kArtikel", referencedColumnName="kArtikel")
public TeigenschaftEntity getTeigenschaftEntity() {
    return teigenschaftEntity;
}

public void setTeigenschaftEntity(TeigenschaftEntity teigenschaftEntity) {
    this.teigenschaftEntity = teigenschaftEntity;
}

teigenschaft的完整实体:

@Entity
@Table(name = "teigenschaft", schema = "dbo", catalog = "Mandant_EinsZwei")
public class TeigenschaftEntity {

private int kEigenschaft;
private int kArtikel;
private String cWaehlbar;
private Integer nSort;
private String cTyp;
private String cAktiv;

@Id
@Column(name = "kEigenschaft")
public int getkEigenschaft() {
    return kEigenschaft;
}

public void setkEigenschaft(int kEigenschaft) {
    this.kEigenschaft = kEigenschaft;
}

@Basic
@Column(name = "kArtikel")
public int getkArtikel() {
    return kArtikel;
}

public void setkArtikel(int kArtikel) {
    this.kArtikel = kArtikel;
}

@Basic
@Column(name = "cWaehlbar")
public String getcWaehlbar() {
    return cWaehlbar;
}

public void setcWaehlbar(String cWaehlbar) {
    this.cWaehlbar = cWaehlbar;
}

@Basic
@Column(name = "nSort")
public Integer getnSort() {
    return nSort;
}

public void setnSort(Integer nSort) {
    this.nSort = nSort;
}

@Basic
@Column(name = "cTyp")
public String getcTyp() {
    return cTyp;
}

public void setcTyp(String cTyp) {
    this.cTyp = cTyp;
}

@Basic
@Column(name = "cAktiv")
public String getcAktiv() {
    return cAktiv;
}

public void setcAktiv(String cAktiv) {
    this.cAktiv = cAktiv;
}

}

这是我得到NullPointerException(第4行)的地方:

session.beginTransaction();
TArtikelEntity tArtikelEntity = session.get(TArtikelEntity.class, 189820);
System.out.println(tArtikelEntity.toString());
System.out.println(tArtikelEntity.getTeigenschaftEntity().getkEigenschaft()+" <---- kEigenschaft");
session.getTransaction().commit();

我在第二个查询中找到了问题。它不是使用kArtikel而是kEigenschaft(teigenschaft的主要关键):

select teigenscha0_.kEigenschaft as kEigensc1_12_0_, teigenscha0_.cAktiv as cAktiv2_12_0_, teigenscha0_.cTyp as cTyp3_12_0_, teigenscha0_.cWaehlbar as cWaehlba4_12_0_, teigenscha0_.kArtikel as kArtikel5_12_0_, teigenscha0_.nSort as nSort6_12_0_ from Mandant_EinsZwei.dbo.teigenschaft teigenscha0_ where teigenscha0_.kEigenschaft=?|select teigenscha0_.kEigenschaft as kEigensc1_12_0_, teigenscha0_.cAktiv as cAktiv2_12_0_, teigenscha0_.cTyp as cTyp3_12_0_, teigenscha0_.cWaehlbar as cWaehlba4_12_0_, teigenscha0_.kArtikel as kArtikel5_12_0_, teigenscha0_.nSort as nSort6_12_0_ from Mandant_EinsZwei.dbo.teigenschaft teigenscha0_ where teigenscha0_.kEigenschaft=189820

但那又怎么样?我提到了TArtikelEntity中的JoinColumn到kArtikel。为什么不使用kArtikel而是使用kEigenschaft?

1 个答案:

答案 0 :(得分:0)

空指针异常不是由于连接造成的。这是因为您正在将null对象转换为字符串。

试试这个:

System.out.println(tArtikelEntity==null?null:tArtikelEntity.toString());