因为有自定义ID,所以要使用UPDATE SET MAX(COUNT)+1来生成,已知似乎HQL不支持除SELECT和WHERE后的子查询,而用源生SQL的话又要改写很多很多很多,所以查询了HIBERNATE自定义ID的方法,却始终找不到一个比较靠谱的,所以麻烦大神们助我。
PS:也有考虑过加锁防止并发,但是加锁的开销我觉得有点得不偿失,如果大大们有这方面的建议,也请详细说明谢谢

解决方案 »

  1.   

    1 支持自行指定ID的方式,你在save前,自己设置好ID的值就行了
    2 可以把ID作为自动产生的,类似于Timestamp,你可以通过触发器来实现ID的赋值,让Hibernate只负责读取,不能更新。
      

  2.   

    謝謝老紫竹,不過對於這兩個提議
    1.我現在是這樣做的,但是如果有幷發,因為我先SELECT MAX后INSERT,會有DUPLICATE產生,如果用鎖什麽的去控制,是不是得不償失?
    2.你說的自動產生是在MYSQL層么?如果是的話,因為我的自增ID是有條件自增,另外還是有純自增的無意義ID的。那麼你說通過觸發器來賦值,是不是要重寫HIBERNATE的方法?有沒有文章推薦呢?