資源描述:
《Hibernate更改部分字段hibernateupdate更改想更改的字段JavaHibernate》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、Hibernate中如果直接使用?Session.update(Objecto);?會(huì)把這個(gè)表中的所有字段更新一遍。?比如:123456789101112publicclassTeacherTest{@Testpublicvoidupdate(){Sessionsession=HibernateUitl.getSessionFactory().getCurrentSession();session.beginTransaction();Teachert=(Teacher)session.get(Teacher.class,3);t
2、.setName("yangtb2");session.update(t);?session.getTransaction().commit();}}?Hibernate執(zhí)行的SQL語(yǔ)句:?12345678910Hibernate:UPDATETeacherSETage=?,birthday=?,name=?,title=?WHEREid=??我們只更改了Name屬性,而Hibernate的sql語(yǔ)句把所有字段都更改了一次。?這樣要是我們有字段是文本類型,這個(gè)類型存儲(chǔ)的內(nèi)容是幾千,幾萬(wàn)字,這樣效率會(huì)很低。那么怎么只更改我們更新的字
3、段呢??有三中方法:?1.XML中設(shè)置property標(biāo)簽update=“false”,如下:我們?cè)O(shè)置age這個(gè)屬性在更改中不做更改???在Annotation中?在屬性GET方法上加上@Column(updatable=false)1234@Column(updatable=false)publicintgetAge(){returnage;}??我們?cè)趫?zhí)行Update方法會(huì)發(fā)現(xiàn),age屬性不會(huì)被更改?123456789Hibernate:
4、UPDATETeacherSETbirthday=?,name=?,title=?WHEREid=??缺點(diǎn):不靈活····?2.第2種方法··使用XML中的dynamic-update=”true”?<classname="com.sccin.entity.Student"table="student"dynamic-update="true">??OK,這樣就不需要在字段上設(shè)置了。但這樣的方法在Annotation中沒(méi)有?3.第三種方式:使用HQL語(yǔ)句(靈活,方便)?使用HQL語(yǔ)句修改數(shù)據(jù)??1234567publi
5、cvoidupdate(){Sessionsession=HibernateUitl.getSessionFactory().getCurrentSession();session.beginTransaction();Queryquery=session.createQuery("updateTeachertsett.name='yangtianb'whereid=3");query.executeUpdate();session.getTransaction().commit();}?Hibernate執(zhí)行的SQL語(yǔ)句:?Hi
6、bernate:updateTeachersetname='yangtianb'whereid=3?這樣就只更新了我們更新的字段······