hibernate实体映射的一些可选优化/配置

//自动为所有的实体类名/实例域名添加引用``,避免数据库的关键字冲突!!!
//在hibernate5以及配置了dialect之后有效
<prop key="hibernate.auto_quote_keyword">true</prop>

//使用KK作为搜索类名导入到HQL中,即from KK
@Entity(name="KK")

//使用命名策略,为映射到的数据库起别名,注意到linux环境下,数据库表名区分大小写
public class CENamingStrategy extends PhysicalNamingStrategyStandardImpl {
    @Override
    public Identifier toPhysicalTableName(Identifier name,JdbcEnvironment context) {
        return new Identifier("CE_" + name.getText(), name.isQuoted());
    }
}
<!--configure required-->
<property name="hibernate.physical_naming_strategy" value="org.jpwh.shared.CENamingStrategy"/>

//分别用于动态插入以及动态更新,不需要更新不必要数据,建议只在表的字段过多时启用
@DynamicInsert
@DynamicUpdate

@Entity
//用于指定一个类为不可变类,避免脏检查等
@Immutable
//对于不可变类可以使用应用级别的视图(子查询实现)
@org.hibernate.annotations.Subselect(
value = "select i.ID as ITEMID, i.ITEM_NAME as NAME, " +
"count(b.ID) as NUMBEROFBIDS " +
"from ITEM i left outer join BID b on i.ID = b.ITEM_ID " +
"group by i.ID, i.ITEM_NAME"
)
//子查询使用的表,这里有个bug,即表名大小写是敏感的。
@org.hibernate.annotations.Synchronize({"Item", "Bid"})
public class ItemBidSummary {
    @Id
    protected Long itemId;
    protected String name;
    protected long numberOfBids;
    public ItemBidSummary() {
    }
// Getter methods...
// ...
}
//需要注意的是使用子查询只有在Query时才刷新数据(本session修改的数据),所以直接对子查询使用get有可能不能获得最新数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值