一:hibernate @Formula
在我们使用hibernate时经常会遇到某个实体类存放的是code值,而不是我们最终想要到页面看到的中文值。如果我们使用hibernate一对一关联这种,单个属性还比较方便,但是如果有多个这样的值就比较麻烦了。这个时候我们可以选择用hibernate的@Formula这个注解来解决。
@Formula(value = "(SELECT wm_concat(tp.id) FROM mk_product p INNER JOIN mk_product_type t ON p.id=t.product_id INNER JOIN mk_type tp ON t.type_id=tp.id where p.id=id group by p.id)")
public String getTypes() {
return types;
}
public void setTypes(String types) {
this.types = types;
}
mk_product:产品表 mk_type:产品类型表 mk_product_type产品类型关联表 。 产品表与产品类型表是多对多的关系.
@Formula中写的是纯SQL语句而非HQL语句,且SQL要写在@Formula("(SQL)")中,不要忘记双引号和括号。
二:spring date jpa 查询与更新
@Query(value="delete from ProductType pt where pt.product.id=?1")
void deleteByProduct(String productId);
报的Not supported for DMLoperations
原因:用query()执行了insert或delete语句。
解决办法:加上 @Modifying