HIbernate 关联关系注解知识总结

1、共3个表对应3个实体类。Supplier(供应商表)、SupplierType(供应商类别表) 、SupplierEvaluate(供应商评价表)

2、3个表的关联关系:Supplier 与 SupplierType  一对一关系,Supplier表里有一个SupplierType的外键(typeId),Supplier 只是通过外键typeId获取供应商类别的名称,不对其做其他操作;与 SupplierEvaluate一对多关系,一个供应商对应多条评价,多条评价对应一个供应商。

3、注解配置

 Supplier.java

  private Long typeId; (供应商类别Id)

  private Set<TSupplierEvaluate> supplierEvaluates;(供应商评价)

  private TSupplierType supplierType;(供应商类别)

其他属性略。。。

我的注解写在get方法上:

@Column(name ="typeId")

public Long getTypeId(){

扫描二维码关注公众号,回复: 304898 查看本文章

return type;

}

一对多关系

@OneToMany(cascade = {CascadeType.ALL}, fetch = FetchType.LAZY, mappedBy = "supplier")

public Set<TSupplierEvaluate> getSupplierEvaluates() {

return supplierEvaluates;

}

同时在SupplierEvaluate.java里配置多对一关系

在SupplierEvaluate类里supplier的外键不用写。(我的是supplier_id)

private TSupplier supplier;

@ManyToOne(cascade = {CascadeType.MERGE},optional = false, fetch=FetchType.LAZY)

@JoinColumn(name = "supplier_id")

public TSupplier getSupplier() {

return supplier;

}

@JoinColumn(name = "supplier_id") 里的supplier_id与之对应的类的属性不要写。标蓝色的字体的名称要一致。

这要就可以关联了。如果要关联保存要把supplier对象放入SupplierEvaluate里及 supplierEvaluate.setSupplier(supplier); 然后把set放入 supplier里。save(supplier);

在Supplier.java里配置 一对一关系

@OneToOne (cascade = {CascadeType.PERSIST, CascadeType.MERGE},fetch = FetchType.LAZY)

@JoinColumn(name="typeId", insertable = false, updatable = false)

public SupplierType getSupplierType() {

return supplierType;

}

易出现should be mapped with insert="false" update="false" 错误,加上insertable = false, updatable = false 就可以,我的这个 一对一只是为了查找name,不关联操作。

@OneToMany 还有一下属性:

@Where(clause="status = 1") 添加新的搜索条件

@OrderBy(value ="weight desc")  排序方法。

4、jsp页面显示

${supplier.supplierType.name }

以上仅供记录与参考,有不正确的地方望纠正,谢谢。

猜你喜欢

转载自qihaibo1989.iteye.com/blog/2393897