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有可能不能獲得最新數據。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章