
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property>
上述对应三个配置项,均需要配置mysql对应的值。
一、查询有如下三种方式:
1、采用createQuery()的方式,不用写sql语句,设定map对应的类名,后面可跟where条件语句:
Query query = session.createQuery("from Navigation n where n.parentid=" + parentid)
2、采用<hibernate-mapping>配置文件中配置sql语句的方式:
Query query = session.getNamedQuery("findUserById")
query.setString("userId", userId)
通过setString()方法设置筛选条件;
xml配置示例如下:
<hibernate-mapping>
<query name="findUserById">
<![CDATA[
from User u where u.id = :userId
]]>
</query>
</hibernate-mapping>
3、采用createSQLQuery()的方式,直接写sql语句:
SQLQuery query = session.createSQLQuery("select * from adm_navigation where parentid=" + parentid)
query.addEntity(Navigation.class) //需要设置对应的类
二、insert插入 *** 作:
创建新的数据对象,设置属性之后,调用:
session.save(obj)
tx.commit()方法保存到数据库;
其中session为:Session session = new Configuration().configure().buildSessionFactory()
tx为:Transaction tx = session.beginTransaction()
需要引入包:
import org.hibernate.SessionFactory
import org.hibernate.cfg.Configuration
import org.hibernate.Transaction
三、update更新 *** 作与insert插入 *** 作类似:
首先调用select查询方法,从数据库中读取出对象或对象数组,
然后给对象设置新的属性值,
再调用session.save(obj)和tx.commit()方法保存到数据库中。
因为save的时候会保存d01和i01两个对象,并不是象你所想象的那样i01会自动判断有了就不插入了。你的思路还是停留在sql上并没有理解好hib的oo特性。应该这样:HibSessionFactory.beginTran()
i01 = XXX.get()//得到学院对象,而不是自行创建
i01.getList().add(d01)//加入的方向与你的相反
dao.save(i01)
HibSessionFactory.endTran()
顺便说下这个错误发生在数据库级别,并不是hibernate级别。
public boolean add(XXX xx) {// TODO Auto-generated method stub
try{
Session se = this.getSession()
se.setFlushMode(FlushMode.AUTO)
Transaction trans = se.beginTransaction()
trans.begin()
se.saveOrUpdate(xx)
trans.commit()
se.close()
trans.close()
return true
}catch(Exception e){
e.printStackTrace()
return false
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)