hibernate+spring 插入数据 高手请进
有一个用户表映射如下,其中头像和权限引用外键,同时本表用户的code又被其它表引用
我要怎么才能插入数据 ,望高手指教
- XML code
<hibernate-mapping> <class name="com.mwgj.wmw.spring.Wmwusertable" table="wmwusertable" lazy="false"> <id name="wmwUid" type="java.lang.Integer"> <column name="wmw_uid" /> <generator class="native"></generator> </id> <many-to-one name="wmwheadimgtable" class="com.mwgj.wmw.spring.Wmwheadimgtable" fetch="select"> <column name="wmw_uheadportrait"> <comment>头像</comment> </column> </many-to-one> <many-to-one name="wmwpopedomtable" class="com.mwgj.wmw.spring.Wmwpopedomtable" fetch="select"> <column name="wmw_upopedom" not-null="true"> <comment>权限</comment> </column> </many-to-one> <property name="wmwUcode" type="java.lang.String"> <column name="wmw_ucode" not-null="true" unique="true"> <comment>用户code</comment> </column> </property> <property name="wmwUuser" type="java.lang.String"> <column name="wmw_uuser" length="20" not-null="true"> <comment>用户名</comment> </column> </property> <property name="wmwUpass" type="java.lang.String"> <column name="wmw_upass" length="30" not-null="true"> <comment>密码</comment> </column> </property> <property name="wmwUnickname" type="java.lang.String"> <column name="wmw_unickname" length="20" not-null="true" unique="true"> <comment>昵称</comment> </column> </property> <property name="wmwUwisdom" type="java.lang.String"> <column name="wmw_uwisdom" length="176"> <comment>名言</comment> </column> </property> <property name="wmwUmail" type="java.lang.String"> <column name="wmw_umail" length="40" not-null="true" unique="true"> <comment>邮箱</comment> </column> </property> <property name="wmwUuserinfo" type="java.lang.String"> <column name="wmw_uuserinfo"> <comment>用户信息</comment> </column> </property> <property name="wmwUinitpass" type="java.lang.String"> <column name="wmw_uinitpass" length="30" not-null="true"> <comment>初始密码</comment> </column> </property> <property name="wmwUregdate" type="java.util.Date"> <column name="wmw_uregdate" length="0"> <comment>注册时间</comment> </column> </property> <property name="wmwUlogdate" type="java.util.Date"> <column name="wmw_ulogdate" length="0"> <comment>最后登陆时间</comment> </column> </property> <property name="wmwUlogtime" type="java.util.Date"> <column name="wmw_ulogtime" length="0"> <comment>在线时长</comment> </column> </property> <set name="wmwpassprotecttables" inverse="true"> <key> <column name="wmw_ppcode" not-null="true"> <comment>用户code</comment> </column> </key> <one-to-many class="com.mwgj.wmw.spring.Wmwpassprotecttable" /> </set> </class></hibernate-mapping>
[解决办法]
你确实应该先插入com.mwgj.wmw.spring.Wmwusertable这个类也就是一端的那个类
不然你想下他并没有和你当前的类纳入同一个session管理之下
插入肯定有异常
最好的方法就是先load上来也可以
然后在在进行保存试下
[解决办法]
[解决办法]
给你我业务逻辑的代码看下
- Java code
package com.bjsxt.oa.manager.impl;import java.util.List;import org.springframework.orm.hibernate3.support.HibernateDaoSupport;import com.bjsxt.oa.manager.OrgManager;import com.bjsxt.oa.model.Orgnization;public class OrgManagerImpl extends HibernateDaoSupport implements OrgManager { public void addOrg(Orgnization org, int parentId) { if(parentId!=0) { org.setParent((Orgnization)this.getHibernateTemplate().load(Orgnization.class, parentId)); } this.getHibernateTemplate().save(org); } public void delOrg(int orgId) { Orgnization org=(Orgnization)this.getHibernateTemplate().load(Orgnization.class, orgId); this.getHibernateTemplate().delete(org); } public Orgnization findOrg(int orgId) { return (Orgnization)this.getHibernateTemplate().load(Orgnization.class, orgId); } public List findOrgs(int parentId) { return this.getHibernateTemplate().find("from Orgnization o where o.parent.id = ?", parentId); } public void updateOrg(Orgnization org, int parentId) { if(parentId!=0) { org.setParent((Orgnization)this.getHibernateTemplate().load(Orgnization.class, parentId)); } this.getHibernateTemplate().update(org); }}
[解决办法]
import java.util.*;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.criterion.DetachedCriteria;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.orm.hibernate3.SessionFactoryUtils;
public class BaseDAO extends HibernateDaoSupport implements IBaseDAO{
/**
* 向数据库添加一条对应于一个业务对象实例的记录
*
* @param entity
* 业务对象实例
* @throws DaoException
*
*/
public boolean create(Object entity) {
try {
super.getHibernateTemplate().save(entity);
return true;
} catch (Exception e) {
System.out.println("保存 " + entity.getClass().getName() + " 实例到数据库失败"+e);
return false;
}
}
public List findByPage(DetachedCriteria dc,int start,int end)
{
List listpage=this.getHibernateTemplate().findByCriteria(dc, start, end);
return listpage;
}
public List ListDeptInfor(DetachedCriteria dc) throws HibernateException{
List lists= this.getHibernateTemplate().findByCriteria(dc);
return lists;
}
/**
* 获得一个session
*/
public Session openSession() {
return SessionFactoryUtils.getSession(super.getHibernateTemplate().getSessionFactory(), false);
}
/**
* 获得Query对象
*/
public Query getQuery(String sql){
Session session = this.openSession();
Query query = session.createQuery(sql);
return query;
}
/**
* 获得Criteria对象
*/
public Criteria getCriteria(Class clazz){
Session session=this.openSession();
Criteria criteria = session.createCriteria(clazz);
return criteria;
}
/**
* 向数据库更新一条对应于一个业务对象实例的记录
*
* @param entity
* 业务对象实例
* @throws DaoException
*
*/
public boolean update(Object entity) {
try {
super.getHibernateTemplate().update(entity);
return true;
} catch (Exception e) {
System.out.println("更新 " + entity.getClass().getName() + " 实例到数据库失败"+e);
return false;
}
}
/**
* 从数据库删除一条对应于一个业务对象的记录
*
* @param entity
* 业务对象实例
* @throws DaoException
*
*/
public boolean delete(Object entity) {
try {
super.getHibernateTemplate().delete(entity);
return true;
} catch (Exception e) {
System.out.println("从数据库删除 " + entity.getClass().getName() + " 实例失败"+e);
return false;
}
}
/**
* 从数据库删除所有对应于一个业务对象的记录
* @param clazz
* 指定类型的业务对象
* @throws DaoException
*/
public boolean deleteAll(Class clazz) {
try {
List result = super.getHibernateTemplate().loadAll(clazz);
super.getHibernateTemplate().deleteAll(result);
return true;
} catch (Exception e) {
System.out.println("从数据库删除 " + clazz.getName() + " 的所有记录失败"+ e);
return false;
}
}
public boolean deleteAll(Collection entities) {
try {
super.getHibernateTemplate().deleteAll(entities);
return true;
} catch(Exception e) {
return false;
}
}
/**
* 从数据库查询一个业务对象的所以记录
* @param clazz
* 指定类型的业务对象
*/
public List LoadAll(Class clazz){
List list=null;
try{
list=super.getHibernateTemplate().loadAll(clazz);
}catch(Exception e){
System.out.println("从数据库查询"+clazz.getName()+"失败");
}
return list;
}
/**
* 根据关键字从数据库加载指定类型的业务对象。
*
* @param clazz
* 业务对象的Class
* @param keyName
* 指定关键字对应的字段名称
* @param keyValue
* 指定关键字的值
* @return <ul>
* <li>当关键字唯一并存在该记录时,返回该记录对应的业务对象</li>
* <li>当关键字不唯一,返回查询结果的第一条记录所对应的业务对象</li>
* <li>当不存在该记录时,返回null</li>
* </ul>
* @throws DaoException
*
*/
public Object loadByKey(Class clazz, String keyName, Object keyValue)
{
List result = super.getHibernateTemplate().find(
"from " + clazz.getName() + " where " + keyName + " = ?",
keyValue);
if (result != null && result.size() > 0) {
return result.get(0);
} else {
return null;
}
}
/**
* 根据主键查询唯一数据对象。
*
* @param clazz
* 业务对象的Class
* @return 返回查询结果包含的业务对象
* @throws DaoException
*
*/
public Object getByPk(Class clazz,Integer id){
Object obj = (Object)super.getHibernateTemplate().get(clazz,id);
return obj;
}
public Object getByPk(Class clazz,Long id){
Object obj = (Object)super.getHibernateTemplate().get(clazz,id);
return obj;
}
public Object getByPk(Class clazz,String id){
Object obj = (Object)super.getHibernateTemplate().get(clazz,id);
return obj;
}
/**
* 根据查询语句查询数据库并返回查询结果所包含的业务对象集合。
*
* @param queryString
* 指定查询语句
* @return 返回查询结果包含的业务对象集合
* @throws DaoException
*
*/
public List find(String queryString) {
List list =null;
try {
list= super.getHibernateTemplate().find(queryString); ;
} catch (Exception e) {
System.out.println("执行查询 " + queryString + " 失败"+e);
}
return list;
}
/**
* 根据带一个参数的查询语句查询数据库并返回查询结果所包含的业务对象集合。
*
* @param queryString
* 指定查询语句
* @param param
* 指定所带参数
* @return 返回查询结果包含的业务对象集合
* @throws DaoException
* ±查询失败时抛??鲆斐??
*/
public List find(String queryString, Object param) {
List list= null;
try {
list = super.getHibernateTemplate().find(queryString, param);
} catch (Exception e) {
System.out.println("执行参数为 " + param + " 的查询 " + queryString + " 失败"+e);
}
return list;
}
/**
* 根据带多个参数的查询语句查询数据库并返回查询结果所包含的业务对象集合。
*
* @param queryString
* 指定查询语句
* @param params
* 指定参数数组
* @return 返回查询结果包含的业务对象集合
* @throws DaoException
*
*/
public List find(String queryString, Object[] params) {
List list= null;
try {
list= super.getHibernateTemplate().find(queryString, params);
} catch (Exception e) {
StringBuffer paramString = new StringBuffer("");
for (int i = 0; i < params.length; i++) {
paramString.append(params[i]);
paramString.append(" ");
}
System.out.println("执行参数为 " + paramString + "的查询 " + queryString + " 失败"+e);
}
return list;
}
}