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(){
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 }
以上仅供记录与参考,有不正确的地方望纠正,谢谢。