hibernate sql语句参数为null时,如何处理

使用hibernate时出现了点问题,现请教各位。

目的:
删除满足条件的数据。

出现问题:
参数为null时,程序出现异常。

问题描述:
之前代码如下:
[code="java"]
sql="delete table where pId=? and sId=?";
query.setParameter(0, pId);
query.setParameter(1, sId);
[/code]
现在遇到一个问题,就是如果参数传一个null的时候,hibernate不会将sql转换成is null,程序将会出现错误,所以修改成如下:
[code="java"]
//两个参数均不是主键
public void deleteTable(Long sId, Long pId) {
String sql = "delete table where 1=1";

    if (null == pId) {
        sql = sql + " and pIdis null";
    } else {
        sql = sql + " and pId=?";
    }

    if (null == sId) {
        sql = sql + " and sIdis null";
    } else {
        sql = sql + " and sId=?";
    }

    Query query = getSession().createQuery(sql);
            //这样判断简直让人崩溃,有啥好的处理方式?
    if (null != pId && null == sId) {
        query.setParameter(0, pId);
    }
    if (null != pId && null != sId) {
        query.setParameter(0, pId).setParameter(1, pId);
    }
    if (null == pId && null != sId) {
        query.setParameter(0, pId);
    }
    query.executeUpdate();
}

[/code]

这样是可以实现业务逻辑的,但是显然程序很笨重,不知到hibernate本身有没有灵活、优雅的方式解决这个问题?

9个回答

我对hibernate也不是很熟悉,不过之前在使用ibatis的时候,直接使用动态sql就能很好的解决类似的问题。
我想这类情况可以通过数据库的设置使代码简化,将以上2个变量的默认值设置为0,这样不管怎样2个字段都有值的(即永不为null),然后代码就可以改成:
[code="java"]
String sql = "delete table where 1=1 and pId=? and sId=?";

    Query query = getSession().createQuery(sql).setParameter(0, null==pId?0:pId).setParameter(1, null==sId?0:sId); 

    query.executeUpdate(); 

[/code]

[b]按你的要求改成这样:[/b]
[code="java"]
public void deleteTable(Long sId, Long pId) {

String sql = "delete table where 1=1";

     if (null != pId && null == sId) {  
         sql+=" and pId="+pid;  
     }  
     if (null != pId && null != sId) {  
         sql+=" and pId="+pid+" and sId="+sid;  
     }  
     if (null == pId && null != sId) {  
         sql+=" and sId="+sId;  
     }  
    query.executeUpdate();  
 } 

[/code]

[b]少了一个query创建对象补上[/b][code="java"]
Query query = getSession().createQuery(sql);
[/code]

可以的,貌似是建议把在表的entity里定义字段参数的时候,把基本类型写成封装过的 Integer Long,不要用基本类型int long

不过我没试过。。。

[b]把你的if块里再加上一个限制条件,如:[/b]
[code="java"]
if (null != pId && null == sId&&!.equals(pId))
[/code]
[b]按照条件把下边的if块补充完整即可[/b]

这个问题,不管怎么样都需要对参数进行判断,所以你还是可以将判断的语句简化,或者你可以在参数传进来之间就对其做判断,不满足条件就不让传进来。假如是从页面传进来的,可以直接用JS判断

[code="java"]
public void deleteTable(Long sId, Long pId) {

String sql = "delete table where 1=1";

Query query = getSession().createQuery(sql);
int index = 0;
if (null == pId) {

sql = sql + " and pId is null";

} else {

sql = sql + " and pId=?";

query.setParameter(index++, pId);
}

    if (null == sId) {  
        sql = sql + " and sIdis null";  
    } else {  
        sql = sql + " and sId=?";  
        query.setParameter(index, sId);
    }  
    query.executeUpdate();  
}  [/code]

不好意思, 太大意了。 这样不行。

这种基本类型和对应的封装类型的问题很麻烦的,给你举个例子吧,比如int和Integer类型的,int属性默认的是0,而Integer是null,在你的数据库里你得清楚默认存的是0还是null再选择你代码有int还是Integer。如果0和null都有,那你的sql语句必须考虑到这两种情况了。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
关于Hibernate hql中IS NULL和IS NOT NULL语句的替代问题

今天看到应该尽量避免使用IS NULL和IS NOT NULL,理由如下: Where字句中的IS NULL和IS NOT NULL将不会使用索引而是进行全表搜索,因此需要通过改变查询方式,分情况讨论等方法,去掉Where子句中的IS NULL和IS NOT NULL。 请问这两个语句有什么不影响效率的语句或方法来进行替代吗? [b]问题补充:[/b] 有时候,IS NULL语句是不可避免的,handonghandong所提的是不是通过Hibernate分批次取出数据,比如每次取100条,避免全表搜索的出现? 但我想问的是在全表进行搜索,取出所有name为空的记录,如果使用IS NULL的话,对这个表所建的索引就会失效,请问有没有什么语句可以替代呢?

hibernate用sql语句查询的问题

我的问题是:如何用hibernate查询类似于 sql 的 select username, count(*) num from user 里面的num列的临时数据。并且如何封装。谢谢。。。。。。不知道我说清楚不、、、、、着急等待中。。。。谢谢各位了先。。。 [b]问题补充:[/b] 我是想 在用hibernate查询出的list数据里面如何把 num提取出来。。。 谢谢大家 我不会 给个思路 谢谢。。。

hibernate执行hql语句做查询操作,返回的为什么全是null!

比如说 [code="java"] String hql = "FROM Ciuser U"; List result = query.createQuery(hql).list(); [/code] 经测试,list.size()==2(表明是从数据库内查询出数据了有两条),但是list里面装的都是null,而不是我的Ciuser对象。 这是什么原因,请各位执教。 [b]问题补充:[/b] 就是遍历出来全是null。 数据库里有两条数据,result.size()确实也是2。 但遍历出来的result.get(i)就是个null。 [b]问题补充:[/b] 文件映射是肯定没问题的,不然在执行hql的时候就要抛异常了。 我所操作的表是没有主键的,配置文件大致如下: [code="java"] <hibernate-mapping> <class name="com.computech.cif.po.sysManage.Ciuser" table="CIUSER"> <composite-id name="id" class="com.computech.cif.po.sysManage.CiuserId"> <key-property name="loginId" type="java.lang.String"> <column name="LOGIN_ID" length="20" /> </key-property> <key-property name="userId" type="java.lang.String"> <column name="USER_ID" length="10" /> </key-property> <key-property name="userName" type="java.lang.String"> <column name="USER_NAME" length="40" /> </key-property> <key-property name="passwd1" type="java.lang.String"> <column name="PASSWD1" length="32" /> </key-property> [/code] 我操作的表没主键,配置文件都是这种格式,唯独操作这张表时有问题,返回对象是null。问题相当奇怪,晕啊。 [b]问题补充:[/b] 原因不是有没有主键的问题,没主键的表hql一样能查一样能save(Object)、delete(Object),配置文件就是我刚才贴出来的一样。 现在还是追问为什么list里面装的都是null,但是size()又是有数据的。

Hibernate在那个方法里将HQL转成普通SQL语句并执行的?

Hibernate在那个方法里将HQL转成普通SQL语句并执行的? [b]问题补充:[/b] 小弟不才,根据各位的提示还是没能找到具体的转换方法在那里。 [b]问题补充:[/b] 昨天就是在研究这个类,我的修改如下。重编译后替换原来的class文件,运行程序看不到我加上去的打印。 private void generate(AST sqlAst) throws QueryException, RecognitionException { System.out.println("************generate begin"); if (this.sql == null) { SqlGenerator gen = new SqlGenerator(this.factory); gen.statement(sqlAst); System.out.println("--generate1"); System.out.println(gen.getSQL()); System.out.println("--generate2"); this.sql = gen.getSQL(); if (log.isDebugEnabled()) { log.debug("HQL: " + this.hql); log.debug("SQL: " + this.sql); } gen.getParseErrorHandler().throwQueryException(); } } [b]问题补充:[/b] 我写了个根据角色进行数据过滤的方法不能直接用的HQL上只能对原始的SQL语句加工,所以想得到Hibernate转换后的语句且在它进行查询之前将此语句加工,然后再让其执行 [b]问题补充:[/b] 我是新建一个项目在里面按hibernate里的结构建包名,然后把反编译后的类文件放到包下进行编译的。见附件图 [b]问题补充:[/b] 因为我的程序已经写好了,现要加入数据过滤的功能。只能这样改了。 想的太简单了是指hibernate并不是象我想的那样会输出个原始语句然后再执行吗?

写sql的时候,判断是否为null,如果不为null,则传参

一般情况下,我是用字符串拼接的,因为可以很方便的去判断变量是否为null 如果不为null,我就开始拼接sql 但是这种操作貌似会有安全问题 于是乎我就把sql换成了下面这样 ``` public List<Map<String,Object>> getEmpNo(Object deptno) { String sql="select empno, ename, deptno from emp where deptno=?"; return dao.query(sql, deptno); } ``` 然后我就不知道该怎么写了 我就是想判断下deptno是否为null,如果不为null,则把数据传入sql中

Hibernate使用sql语句操作数据库时出现的异常could not execute query

代码如下: HibernateUtil: public static int createSqlQuery(String sql, Serializable... serializables) { Session session = null; Integer result = null; try { session = getSession(); session.beginTransaction(); Query query = session.createSQLQuery(sql); if (serializables != null) { for (int i = 0; i < serializables.length; i++) { query.setParameter(i, serializables[i]); } } result = (Integer) query.uniqueResult(); session.getTransaction().commit(); } catch (HibernateException e) { if (null != session) { session.getTransaction().rollback(); } e.printStackTrace(); } return result; } Test: public class Test { public static void main(String[] args) { String sql = "insert into t_user values(2,'Nero','123','18628840518','devilmaycryn@qq.com')"; System.out.println(HibernateUtil.createSqlQuery(sql)); } }

hibernate中有两句sql语句,用到了=:这个奇怪符号,不解其意

![图片说明](https://img-ask.csdn.net/upload/201605/01/1462114323_303128.png) ## 问题一:如上图 ## ## 问题二:如果不像上图这样写,就写平时常见的sql,要表达出同样的意思该怎么写这两句?第一个是通过用户名username获取用户信息,第二个是通过注册框内输入的username和password来获取用户信息 ## ## 我现在在做struts2和hibernate集成做个注册登陆功能,登陆功能已完成,但是数据库里光出现id,不出现我注册的用户信息,控制台打印出的sql都显示为null: ## User [id=0, username=null, password=null] ## Hibernate: insert into t_user (username, password) values (?, ?) ## ## 我不知道是哪里有问题,怀疑是第二句sql的问题? ##

hibernate 中sql语句返回值接收的问题

public class ReportInfo  implements Serializable{         /**返回报表持久化类*/ /** 此结果集应为   data表,人员表,部门表,系统表*/ /** 此结果集是报表显示的基本数据集*/ /**      data_id  数据表ID     data_time  数据日期     data_e_id 人员ID     data_data 数据信息     e_No 人员工号     e_name 人员姓名     data_d_id 部门ID     d_name 部门名称     s_id 系统ID     s_name 系统名称      */ private Integer data_id; private String data_time; private Integer data_e_id; private String data_data; private String e_No; private String e_name; private Integer d_id; private String d_name; private Integer s_id; private String s_name; /**  dao层代码*/ /** 根据日期查询日报信息 */ public List<ReportInfo> selectForDataInfo(String string) { ReportInfo  reportInfo =null; /** 通过getHibernateTemplate()获取Session*/ Session currentSession = this.getHibernateTemplate() .getSessionFactory().getCurrentSession(); Transaction transaction = currentSession.beginTransaction(); /**此处sql 大意是根据s_table 表 left join 了四次*/ String SQL = "SELECT info.data_id,info.data_time,info.data_e_id,info.data_data,e.e_No,e.e_name,d.d_id,d.d_name,s.s_id,s.s_name FROM s_table s LEFT JOIN d_table d ON s.d_id= d.d_id LEFT JOIN datainfo_table info ON  s.s_id = info.data_s_id AND info.data_time LIKE '%"+string+"%' LEFT JOIN e_table e ON info.data_s_id=e.e_id"; //SELECT aaa.data_id,aaa.data_time,aaa.data_e_id,aaa.data_data,aaa.e_No,aaa.e_name,s.d_id,aaa.d_name,s.s_id,s.s_name FROM s_table s LEFT JOIN (SELECT df.data_id,df.data_time,df.data_d_id,df.data_data,df.data_s_id,df.data_e_id,e.e_No,e.e_name,d.d_name,s.s_id,s.s_name  FROM datainfo_table df,d_table d,e_table e,s_table s WHERE df.data_e_id=e.e_id AND df.data_d_id = d.d_id  AND df.data_s_id=s.s_id AND df.data_time LIKE '%2016-08-28%' ) aaa ON aaa.s_id =s.s_id; //SELECT aaa.data_id data_id,aaa.data_time,aaa.data_e_id,aaa.data_data,aaa.e_No,aaa.e_name,s.d_id,aaa.d_name,s.s_id,s.s_name FROM s_table s LEFT JOIN (SELECT df.data_id,df.data_time,df.data_d_id,df.data_data,df.data_s_id,df.data_e_id,e.e_No,e.e_name,d.d_name,s.s_id,s.s_name  FROM datainfo_table df,d_table d,e_table e,s_table s WHERE df.data_e_id=e.e_id AND df.data_d_id = d.d_id  AND df.data_s_id=s.s_id AND df.data_time LIKE '%"+string+"%' ) aaa ON aaa.s_id =s.s_id; /** 通过Session.createSQLQuery(SQL)方法,可以使用SQL语句*/ /** addEntity(ReportInfo.class)方法指明结果集用哪个持久化类接收*/ /** 此持久化类在数据库表中的体现一直为null,只用于接收结果用*/ SQLQuery createSQLQuery = currentSession.createSQLQuery(SQL).addEntity(ReportInfo.class); List<ReportInfo> lists =createSQLQuery.list(); for(ReportInfo rt:lists){ System.out.println(rt+"66666"); } transaction.commit(); return lists; } sql执行正确,但是返回值ReportInfo只有4个字段有值。大神帮忙看看。

Hibernate 语句执行顺序问题

代码: private static void editInfo() { Session session = null; try { session = HibernateUtil.getSession(); if (session != null) { session.beginTransaction(); Person p = new Person("王三", 22, "男", "北京"); session.save(p); session.delete(p); p.setId(null); session.save(p); session.getTransaction().commit(); } } catch (Exception ex) { if (session != null) { session.getTransaction().rollback(); } ex.printStackTrace(); } finally { HibernateUtil.CloseSession(); } } 控制台显示: Hibernate: insert into PERSON (NAME, AGE, GENDER, ADDRESS) values (?, ?, ?, ?) Hibernate: delete from PERSON where ID=? Hibernate: insert into PERSON (NAME, AGE, GENDER, ADDRESS) values (?, ?, ?, ?) 按照Hibernate的规定执行应该是insert,insert,delete,但不知道为什么这里是insert,delete,insert,请各位大哥指教一下。

hibernate Criteria list() 方法 n条sql语句

条件:开启二级缓存 hibernate Criteria list() 方法,搜索第一次,会按条件进行搜索,发出条件搜索sql语句 但第二次时,应该是缓存中已经存在了数据 出发的却是n条按id查询的语句 严重影响了工程的性能. 请问是什么原因,有没有办法解决?

利用hibernate执行原始的sql,但是在java里面提示没有返回结果集

项目上都是利用hibernate的原始态调用sql,由于涉及的表比较多,所以在写sql查询出来的速度很慢,我们在优化的时候,把一些表的结果集放在临时表上了,这样提升了一些速度。但是我现在在java的源代码上拿不到结果集 原始的sql ---------------------------------------------------------------------- select --商业分布统计 count(distinct vs.data_id ) totalNum , count(distinct vs.cell_id) cellNum, v.level as lev from shannxi.dbo.v_cell_level v , shannxi.dbo.t_cell_value vs where vs.data_type = 1 AND v.ID=vs.cell_id and vs.data_id in( SELECT DISTINCT nn.id as stationId from shannxi.dbo.bus_line bl, shannxi.dbo.bus_station bs, shannxi.dbo.bus_station_new nn where bl.id in(select projectid from t_schememedia t where t.schemeid = 2) AND bl.busid=bs.bus_id AND bs.station_name = nn.station_name AND bs.kind=nn.kind AND abs(bs.lng-nn.lng)<0.05 AND abs(bs.lat-nn.lat)<0.05 ) and v.level is not null group by v.level 现在利用临时表的sql ---------------------------------------------------------------------- DECLARE @line table (row_id int IDENTITY(1,1),ID int ,busid varchar(50),key_name varchar(100) ) INSERT INTO @line(id,busid,key_name) select ll.id,ll.busid,ll.key_name from newdection.dbo.t_schememedia sc INNER JOIN shannxi.dbo.bus_line ll ON ll.id=sc.projectid WHERE schemeid=40 DECLARE @station table (row_id int IDENTITY(1,1) ,ID int ,station_name varchar(50) ,lng decimal(18,8),lat decimal(18,8), regionid int, station_code varchar(20),level varchar(8),kind varchar(10),neighborhood_id int ) INSERT INTO @station( id,station_name,lng,lat,regionid,station_code,kind,level,neighborhood_id) select distinct nn.id,nn.station_name,nn.lng,nn.lat,nn.regionid,nn.station_code,nn.kind, nn.level,nn.neighborhood_id from (select ll.id,ll.busid,ll.key_name from newdection.dbo.t_schememedia sc INNER JOIN shannxi.dbo.bus_line ll ON ll.id=sc.projectid WHERE schemeid=40) ll INNER JOIN shannxi.dbo.bus_station bs on ll.busid=bs.bus_id INNER join shannxi.dbo.bus_station_new nn ON bs.station_name=nn.station_name AND abs(bs.lng-nn.lng)<0.05 AND abs(bs.lat-nn.lat)<0.05 AND bs.kind=nn.kind select cl.hous_level as lev, ss.num , COUNT(DISTINCT nn.ID ) totalNum , COUNT(DISTINCT cl.ID ) cell from @station nn INNER JOIN shannxi.dbo.t_cell_value cc ON cc.data_type=1 AND cc.data_id=nn.ID INNER join shannxi.dbo.v_cell_level cl ON cc.cell_id=cl.ID AND cl.hous_level>=1, (select COUNT(DISTINCT nn.ID ) num from @station nn INNER JOIN shannxi.dbo.t_cell_value cc ON cc.data_type=1 AND cc.data_id=nn.ID INNER join shannxi.dbo.v_cell_level cl ON cc.cell_id=cl.ID WHERE cl.hous_level>=1) ss group by cl.hous_level , ss.num 结果在hibernate执行 Query query = super.getCurrentSession().createSQLQuery(sql.toString()); query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP); @SuppressWarnings("unchecked") List<Map<String, Object>> Typelist = query.list(); 出现的结果错误是 hprose.common.HproseException: org.hibernate.exception.GenericJDBCException: could not extract ResultSet org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:54) org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:125) org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:110) org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:61) 但是我直接在数据库是有返回结果集的可以看到

hibernate能打印出insert语句,但是数据库中没有更新数据啊!

hibernate能打印出insert语句,但是数据库中没有更新数据啊!能分析一下具体什么原因么?不行的话我在贴代码!!谢谢各位了~! <br /> <br />补充一下:我是在一个JSP页面里 两次调用HIBERNATE.UTIL的SAVE方法来实现数据更新的。前一条语句可以更新数据库,但是后一条可以打印出insert语句但是数据库没有更新。我是,请大家关照!<br/><strong>问题补充</strong><br/>来高人啊!<br /><strong>问题补充:</strong><br />兄弟们,请看代码 <br />SupplierDao.java <br />////////////////////////// <br />package com.supply.dao; <br /> <br />import java.util.List; <br />import org.hibernate.HibernateException; <br />import com.supply.dao.hibernate.HibernateUtil; <br />import org.hibernate.Session; <br />import com.supply.domain.Supplier; <br /> <br />public class SupplierDao{ <br /> <br /> <br /> public boolean saveSupplier(Supplier supplier) <br /> { <br /> try <br /> { <br /> Session savesu=HibernateUtil.currentSession();//取得SESSION <br /> HibernateUtil.beginTransaction();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //开始事务 <br /> savesu.saveOrUpdate(supplier);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //保存 <br /> savesu.flush(); <br /> HibernateUtil.commitTrasaction();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //提交事务 <br /> HibernateUtil.closeSession();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //关闭SESSION <br /> return true; <br /> } <br /> catch(HibernateException e) <br /> { <br /> System.out.print(e); <br /> } <br /> return false; <br /> } <br /> <br />} <br />////////////////////////////////////////// <br />SuhistoryDao.java <br />//////////////////////////////////// <br />package com.supply.dao; <br /> <br />import java.util.List; <br />import org.hibernate.HibernateException; <br />import com.supply.dao.hibernate.HibernateUtil; <br />import org.hibernate.Session; <br />import com.supply.domain.Supplier; <br />import com.supply.domain.Suhistory;; <br /> <br />public class SuhistoryDao { <br /> <br /> public boolean addhistory(Suhistory suhistory){ <br /> <br /> try <br /> { <br /> Session addsu=HibernateUtil.currentSession();//取得SESSION <br /> HibernateUtil.beginTransaction();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //开始事务 <br /> addsu.saveOrUpdate(suhistory);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //保存 <br /> addsu.flush(); <br /> HibernateUtil.commitTrasaction();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //提交事务 <br /> HibernateUtil.closeSession();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //关闭SESSION <br /> return true; <br /> } <br /> catch(HibernateException e) <br /> { <br /> e.printStackTrace(); <br /> System.out.print(e); <br /> return false; <br /> } <br /> <br /> } <br /> <br />} <br />//////////////////////// <br />HibernateUtil.java <br />/////////////////////// <br />package com.supply.dao.hibernate; <br /> <br />import org.hibernate.HibernateException; <br />import org.hibernate.Session; <br />import org.hibernate.SessionFactory; <br />import org.hibernate.Transaction; <br />import org.hibernate.cfg.Configuration; <br /> <br />public class HibernateUtil{ <br /> <br /> private static final SessionFactory sessionFactory; <br /> <br /> static <br /> { <br /> try <br /> { <br /> sessionFactory=new Configuration().configure().buildSessionFactory(); <br /> <br /> } <br /> catch(Throwable ex) <br /> { <br /> ex.printStackTrace(); <br /> System.out.println("Initial SessionFactory creation failed"); <br /> throw new ExceptionInInitializerError(ex); <br /> } <br /> } <br /> public static final ThreadLocal tLocalsess=new ThreadLocal(); <br /> <br /> public static final ThreadLocal tLocaltx=new ThreadLocal(); <br /> <br /> public static Session currentSession() <br /> { <br /> Session session=(Session)tLocalsess.get(); <br /> try <br /> { <br /> //如果第一次使用,则创建一个新的SESSION <br /> if(session==null||!session.isOpen()) <br /> { <br /> //如果不是第一次使用,则打开一个SESSION <br /> session=sessionFactory.openSession(); <br /> tLocalsess.set(session); <br /> System.out.println("Session creation ok&nbsp;&nbsp; "); <br /> } <br /> } <br /> catch(HibernateException e) <br /> { <br /> e.printStackTrace(); <br /> } <br /> return session; <br /> } <br /> <br /> public static void closeSession() <br /> { <br /> Session session=(Session)tLocalsess.get(); <br /> tLocalsess.set(null); <br /> try <br /> { <br /> if(session!=null&amp;&amp;session.isOpen()) <br /> { <br /> session.close(); <br /> System.out.println("session close ok&nbsp; "); <br /> } <br /> } <br /> catch(HibernateException e) <br /> { <br /> System.out.println("session close error!&nbsp; "); <br /> } <br /> <br /> } <br /> <br /> public static void beginTransaction() <br /> { <br /> Transaction tx=(Transaction)tLocaltx.get(); <br /> try <br /> { <br /> if(tx==null) <br /> { <br /> tx=currentSession().beginTransaction(); <br /> tLocaltx.set(tx); <br /> System.out.println("Transaction ok&nbsp;&nbsp; "); <br /> } <br /> } <br /> catch(HibernateException e) <br /> { <br /> &nbsp;&nbsp;&nbsp; System.out.println("Transaction error!&nbsp; "); <br /> } <br /> } <br /> <br /> public static void commitTrasaction() <br /> { <br /> Transaction tx=(Transaction)tLocaltx.get(); <br /> try <br /> { <br /> if(tx!=null&amp;&amp;!tx.wasCommitted()&amp;&amp;!tx.wasRolledBack()) <br /> { <br /> tx.commit(); <br /> System.out.println("commit ok&nbsp;&nbsp; "); <br /> } <br /> } <br /> catch(HibernateException e) <br /> { <br /> &nbsp;&nbsp;&nbsp; System.out.println("commit error&nbsp;&nbsp; "); <br /> } <br /> } <br /> <br /> public static void rollbackTransaction() <br /> { <br /> Transaction tx=(Transaction)tLocaltx.get(); <br /> try <br /> { <br /> tLocaltx.set(null); <br /> if(tx!=null&amp;&amp;!tx.wasCommitted()&amp;&amp;!tx.wasRolledBack()) <br /> { <br /> tx.rollback(); <br /> } <br /> } <br /> catch(HibernateException e) <br /> { <br /> } <br /> } <br /> <br /> private static Session openSession() throws HibernateException <br /> { <br /> return getSessionFactory().openSession(); <br /> } <br /> <br /> private static SessionFactory getSessionFactory() throws HibernateException <br /> { <br /> return sessionFactory; <br /> } <br />} <br />////////////////////// <br />gysZrSave.jsp <br />//////////////////////// <br />&lt;%@ page contentType="text/html; charset=utf-8" language="java"%&gt; <br />&lt;%@ page import="java.util.*"%&gt; <br />&lt;%@ page import="java.util.Date"%&gt; <br />&lt;%@ page import="java.sql.*"%&gt; <br />&lt;%@ page import="com.supply.dao.hibernate.*"%&gt; <br />&lt;%@ page import="com.supply.dao.hibernate.HibernateUtil"%&gt; <br />&lt;%@ page import="com.supply.domain.Supplier"%&gt; <br />&lt;%@ page import="com.supply.dao.*"%&gt; <br />&lt;%@ page import="com.supply.dao.SupplierDao"%&gt; <br />&lt;%@ page import="com.supply.common.FormatUtil"%&gt; <br />&lt;%@ page import="com.supply.dao.SuhistoryDao"%&gt; <br />&lt;%@ page import="com.supply.domain.Suhistory"%&gt; <br /> <br />&lt;%/////////////////////////////////////////////////%&gt; <br />&lt;%@page import="org.hibernate.*" %&gt; <br />&lt;%@page import="org.hibernate.cfg.*" %&gt; <br />&lt;%@page import="com.supply.domain.Supplier"%&gt; <br />&lt;%//////////////////////////////////////////////////%&gt; <br /> <br />&lt;%&nbsp; <br /> <br /> <br /> <br />&nbsp;&nbsp;&nbsp; //设置参数传递编码 <br />&nbsp;&nbsp; request.setCharacterEncoding("utf-8"); <br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp; String gysbm=request.getParameter("gysbm"); <br />&nbsp;&nbsp; String gyscs=request.getParameter("gyscs"); <br />&nbsp;&nbsp; String gysmc=request.getParameter("gysmc"); <br />&nbsp;&nbsp; float zczj=new Float(request.getParameter("zczj")).floatValue(); <br />&nbsp;&nbsp; String zcdz=request.getParameter("zcdz"); <br />&nbsp;&nbsp; String frdb=request.getParameter("frdb"); <br />&nbsp;&nbsp; String qyxz=request.getParameter("qyxz"); <br />&nbsp;&nbsp; String sfzhm=request.getParameter("sfzhm"); <br />&nbsp;&nbsp; String qylx=request.getParameter("qylx"); <br />&nbsp;&nbsp; String zzjg=request.getParameter("zzjg"); <br />&nbsp;&nbsp; String swdjh=request.getParameter("swdjh"); <br />&nbsp;&nbsp; String gskhh=request.getParameter("gskhh"); <br />&nbsp;&nbsp; String yhzh=request.getParameter("yhzh"); <br />&nbsp;&nbsp; String lxdz=request.getParameter("lxdz"); <br />&nbsp;&nbsp; String lxr=request.getParameter("lxr"); <br />&nbsp;&nbsp; String dhhm=request.getParameter("dhhm"); <br />&nbsp;&nbsp; //重复String gsdz=request.getParameter("gsdz"); <br />&nbsp;&nbsp; String gsyb=request.getParameter("gsyb"); <br />&nbsp;&nbsp; String gyszt=request.getParameter("gyszt"); <br />&nbsp;&nbsp; String gssf=request.getParameter("gssf"); <br />&nbsp;&nbsp; String zrsj=request.getParameter("zrsj"); <br /> <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //数据初始化&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SupplierDao supplierDao=new SupplierDao(); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Supplier sup=new Supplier(); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //保存数据 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sup.setGysbm(gysbm); <br /> &nbsp;&nbsp;&nbsp; sup.setGyscs(gyscs); <br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sup.setGysmc(gysmc); <br /> &nbsp;&nbsp;&nbsp; sup.setZcdz(zcdz); <br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sup.setZczj(zczj); <br /> sup.setFrdb(frdb); <br /> &nbsp;&nbsp;&nbsp; sup.setSfzhm(sfzhm); <br /> sup.setQyxz(qyxz); <br /> &nbsp;&nbsp;&nbsp; sup.setQylx(qylx); <br /> sup.setZzjg(zzjg); <br /> sup.setSwdjh(swdjh); <br /> sup.setGskhh(gskhh); <br /> sup.setYhzh(yhzh); <br /> sup.setLxdz(lxdz); <br /> sup.setLxr(lxr); <br /> sup.setDhhm(dhhm); <br /> //sup.setGsdz(gsdz); <br /> &nbsp;&nbsp;&nbsp; sup.setGsyb(gsyb); <br /> sup.setGyszt(gyszt); <br /> sup.setGssf(gssf); <br /> sup.setZrsj(zrsj); <br /> <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(supplierDao.saveSupplier(sup)){ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.print("&lt;script language='javascript'&gt;") ; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.print("alert('供应商添加成功!');"); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.print("&lt;/script&gt;"); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br /> <br />&nbsp; SuhistoryDao suhistoryDao=new SuhistoryDao(); <br />&nbsp; Suhistory suhistory=new Suhistory(); <br />&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; suhistory.setGysbm("aaaaaaaa"); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; suhistory.setSjsj("2002-1-1"); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; suhistory.setSjmc("3"); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; suhistory.setSjyy("32"); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; suhistory.setSphy("32"); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; suhistory.setBz("32"); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(suhistoryDao.addhistory(suhistory)){ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.println("供应商成功进入预选状态!"); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br /> <br />&nbsp;&nbsp;&nbsp; <br />%&gt; <br /> <br /><br /><strong>问题补充:</strong><br />刚跟踪了一下。事件已经写了commit代码,但是好像没有执行。不知道其中原因。<br /><strong>问题补充:</strong><br />我 已经修改为save(),但是还是没法更新数据库。 <br /> <br />Transaction ok&nbsp;&nbsp; <br />Hibernate: <br />&nbsp;&nbsp;&nbsp; insert <br />&nbsp;&nbsp;&nbsp; into <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; supplier <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (gysmc, zcdz, zczj, frdb, sfzhm, qyxz, qylx, zzjg, swdjh, gskhh, yhzh, lxdz, lxr, dhhm, gsdz, gsyb, gyszt, gssf, zrsj, yxsj, zzsj, qtsj, gysbm, gyscs) <br />&nbsp;&nbsp;&nbsp; values <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) <br />commit ok&nbsp;&nbsp; <br />session close ok&nbsp; <br />Session creation ok&nbsp;&nbsp; <br />Hibernate: <br />&nbsp;&nbsp;&nbsp; select <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; max(id) <br />&nbsp;&nbsp;&nbsp; from <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; suhistory <br />Hibernate: <br />&nbsp;&nbsp;&nbsp; insert <br />&nbsp;&nbsp;&nbsp; into <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; suhistory <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (gysbm, sjsj, sjmc, sjyy, sphy, bz, id) <br />&nbsp;&nbsp;&nbsp; values <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (?, ?, ?, ?, ?, ?, ?) <br />session close ok&nbsp; <br /><strong>问题补充:</strong><br />从上面可以看出,COMMIT确实没有提交,就直接关闭SESSION了,但是我不知道为什么会这样啊。 <br />谢谢各位的耐心解答。不甚感谢!!!<br /><strong>问题补充:</strong><br />刚看到 第二次不但 事件没提交 连Transaction 都没有执行!天啦。已经困扰我两天了! <br /><strong>问题补充:</strong><br />saveOrUpdate方法跟主键有关 <br /> <br />你的pojo类对应的xml文件里指定了主键即&lt;id&gt;标签 <br /> <br />hibernate执行saveOrUpdate方法时 看你的主键 没有的话 他就什么都不执行了 <br /> <br />saveOrUpdate(obj)你的保证obj里你set了你指定成主键那个属性。 <br /> <br />如果缓存里有了这个主键他就update了 没有就insert了 <br /> <br /> <br />谢谢大哥,我已经将saveOrUpdate()修改为 save()了 执行后成上面的结果!

用原生sql查询 为什么实体类中存在该字段,但为什么还是报错列名无效

这是dao层 ds = HibernateDataSource.getHibernateDataSource(); session = ds.getSession(); String sql1="SELECT CHANNEL_ID FROM JC_CHANNEL WHERE PARENT_ID='"+ channelId + "'"; SQLQuery sqlQuery1 = session.createSQLQuery(sql1.toString()); List<Channel> channelList = sqlQuery1.addScalar("id",Hibernate.INTEGER).setResultTransformer(Transformers.aliasToBean(Channel.class)).list(); List idList=new ArrayList(); 这是配置文件中 <class name="Channel" table="jc_channel" dynamic-update="true"> <meta attribute="sync-DAO">false</meta> <cache usage="read-write"/> <id name="id" type="java.lang.Integer" column="channel_id"> <!-- <generator class="identity"/>--> <generator class="sequence"> <param name="sequence">SEQ_JC_CHANNEL</param> </generator> </id> <property name="path" column="channel_path" type="string" not-null="false" length="30"/> <property name="lft" column="lft" type="integer" not-null="true" length="10"/> <property name="rgt" column="rgt" type="integer" not-null="true" length="10"/> <property name="priority" column="priority" type="integer" not-null="true" length="10"/> <property name="hasContent" column="has_content" type="java.lang.Boolean" not-null="true"/> <property name="display" column="is_display" type="java.lang.Boolean" not-null="true"/> <one-to-one name="channelExt" class="ChannelExt" cascade="delete"/> <many-to-one name="site" column="site_id" class="CmsSite" not-null="true"></many-to-one> <many-to-one name="model" column="model_id" class="CmsModel" not-null="true"></many-to-one> <many-to-one name="parent" column="parent_id" class="Channel" not-null="false"></many-to-one> <set name="child" inverse="true" cascade="delete" sort="com.jeecms.common.hibernate3.PriorityComparator"> <cache usage="read-write"/> <key column="parent_id"/> <one-to-many class="Channel"/> </set> <set name="viewGroups" table="jc_chnl_group_view" sort="com.jeecms.common.hibernate3.PriorityComparator"> <cache usage="read-write"/> <key column="channel_id"/> <many-to-many column="group_id" class="CmsGroup"/> </set> <set name="contriGroups" table="jc_chnl_group_contri" sort="com.jeecms.common.hibernate3.PriorityComparator"> <cache usage="read-write"/> <key column="channel_id"/> <many-to-many column="group_id" class="CmsGroup"/> </set> <set name="users" table="jc_channel_user" sort="com.jeecms.common.hibernate3.PriorityComparator"> <cache usage="read-write"/> <key column="channel_id"/> <many-to-many column="user_id" class="CmsUser"/> </set> <set name="channelTxtSet" inverse="true" cascade="delete-orphan"> <cache usage="read-write"/> <key column="channel_id"/> <one-to-many class="ChannelTxt"/> </set> <map name="attr" table="jc_channel_attr" cascade="all-delete-orphan"> <cache usage="read-write"/> <key column="channel_id" not-null="true"/> <map-key column="attr_name" type="string" length="30"/> <element column="attr_value" type="string" length="255"/> </map> </class> </hibernate-mapping>

关于SQL 拼接的问题 请高手提供想法

比如现在又3个参数 a , b , c 现在要用这3个参数 任意的组合,或单独查符合条件的记录,比如 from User u where u.a=? and u.b=? u.c=? 现在要做 参数拼接 StringBuffer sb = new StringBuffer(); sb.append("from User u where "); if(a!=null){ sb.append(" u.a="); sb.append(a); } if(b!=null){ sb.append(" and u.b="); sb.append(b); } if(c!=null){ sb.append(" and u.c="); sb.append(c); } 现在问题出来了 如果A不等于空的话出来的SQL语句是这样的 from User u where u.a=? and u.b=? and u.c=?; 如果A等于空的话 出来的SQL语句就是这样的 from User u where and u.b=? and u.c=?; 请问怎么才能想个办法 控制这个and 呢?

sql语句评论排行磅怎么写???

文章表 CREATE TABLE article ( aid int identity(1,1) PRIMARY KEY, --id atitle varchar(20) NOT NULL, --标题 acontent varchar(1000) NULL, --内容 apubtime varchar(20) NOT NULL, --时间 asteas int default(0), --浏览 bid int NOT NULL, --blogid外键 sid int NULL --sortid外键 ) 文章评论表 CREATE TABLE feedback( fid int identity(1,1) PRIMARY KEY, --id content varchar(100) NULL, --内容 pubtime varchar(20) NOT NULL, --时间 aid int NOT NULL, --回复的日志 bid int NOT NULL, --回复那个博客的文章 fbbid int NOT NULL --回复人 ) [b]问题补充:[/b] 按回复数排!

Hibernate打出执行语句,怎么还是没有插入数据呢,也没有异常,这怎么解释呢?

[code="java"]public static void main(String[] agrs) { Session session = null; try{ session = HibernateSessionFactory.getSession(); News news = new News(); news.setAddtime(new Date()); news.setNewscontent("aaa"); news.setTitle("bbb"); session.save(news); } catch(Exception e) { e.printStackTrace(); } finally{ session.close(); } } [/code] Hibernate: insert into bookstore.news (title, newscontent, addtime) values (?, ?, ?) 这是控制台打印出来的语句,Hibernate自动打印出来的 所以执行了,操作,但是如果操作失败了,也会打印出异常信息,但是没有任何异常信息。也没有插入数据成功。

sql语句报错,解决不了,请大神看看啊 。。。急急急。。

非常着急 请大神速速看看,万分感谢。。 我的sql语句 ``` <update id="updateByPrimaryKeySelective" parameterType="java.util.List"> <foreach collection="list" item="item" index="index" open="begin" close=";end;" separator=";"> update TSM_CAS_R001 <set > <if test="item.casNo != null"> cas_no = #{item.casNo,jdbcType=VARCHAR}, </if> <if test="item.chDic != null"> ch_dic = #{item.chDic,jdbcType=VARCHAR}, </if> <if test="item.cSeqid != null"> c_seqid = #{item.cSeqid,jdbcType=VARCHAR}, </if> <if test="item.srNo != null"> sr_no = #{item.srNo,jdbcType=VARCHAR}, </if> <if test="item.casArbegdtime != null"> cas_arbegdtime = #{item.casArbegdtime,jdbcType=VARCHAR}, </if> <if test="item.casArenddtime != null"> cas_arenddtime = #{item.casArenddtime,jdbcType=VARCHAR}, </if> <if test="item.casArintime != null"> cas_arintime = #{item.casArintime,jdbcType=VARCHAR}, </if> <if test="item.casArouttime != null"> cas_arouttime = #{item.casArouttime,jdbcType=VARCHAR}, </if> <if test="item.casNcarouttime != null"> cas_ncarouttime = #{item.casNcarouttime,jdbcType=DECIMAL}, </if> <if test="item.casSmsartime != null"> cas_smsartime = #{item.casSmsartime,jdbcType=VARCHAR}, </if> <if test="item.casOnldartime != null"> cas_onldartime = #{item.casOnldartime,jdbcType=VARCHAR}, </if> <if test="item.casCastmp1 != null"> cas_castmp1 = #{item.casCastmp1,jdbcType=DECIMAL}, </if> <if test="item.casCastmp1time != null"> cas_castmp1time = #{item.casCastmp1time,jdbcType=VARCHAR}, </if> <if test="item.casCastmp2 != null"> cas_castmp2 = #{item.casCastmp2,jdbcType=DECIMAL}, </if> <if test="item.casCastmp2time != null"> cas_castmp2time = #{item.casCastmp2time,jdbcType=VARCHAR}, </if> <if test="item.casCastmp3 != null"> cas_castmp3 = #{item.casCastmp3,jdbcType=DECIMAL}, </if> <if test="item.casCastmp3time != null"> cas_castmp3time = #{item.casCastmp3time,jdbcType=VARCHAR}, </if> <if test="item.casArmaxwgt != null"> cas_armaxwgt = #{item.casArmaxwgt,jdbcType=DECIMAL}, </if> <if test="item.casArminwgt != null"> cas_arminwgt = #{item.casArminwgt,jdbcType=DECIMAL}, </if> <if test="item.casAravgwgt != null"> cas_aravgwgt = #{item.casAravgwgt,jdbcType=DECIMAL}, </if> <if test="item.casArmaxpres != null"> cas_armaxpres = #{item.casArmaxpres,jdbcType=DECIMAL}, </if> <if test="item.casArminpres != null"> cas_arminpres = #{item.casArminpres,jdbcType=DECIMAL}, </if> <if test="item.casAravgpres != null"> cas_aravgpres = #{item.casAravgpres,jdbcType=DECIMAL}, </if> <if test="item.casArvtmp != null"> cas_arvtmp = #{item.casArvtmp,jdbcType=DECIMAL}, </if> <if test="item.casDeptmp != null"> cas_deptmp = #{item.casDeptmp,jdbcType=DECIMAL}, </if> <if test="item.casQmessage != null"> cas_qmessage = #{item.casQmessage,jdbcType=VARCHAR}, </if> <if test="item.casQtime != null"> cas_qtime = #{item.casQtime,jdbcType=VARCHAR}, </if> <if test="item.casTimedf != null"> cas_timedf = #{item.casTimedf,jdbcType=VARCHAR}, </if> <if test="item.casAttdate != null"> cas_attdate = #{item.casAttdate,jdbcType=VARCHAR}, </if> <if test="item.casAccdate != null"> cas_accdate = #{item.casAccdate,jdbcType=VARCHAR}, </if> <if test="item.wkGroup != null"> wk_group = #{item.wkGroup,jdbcType=VARCHAR}, </if> <if test="item.wkShift != null"> wk_shift = #{item.wkShift,jdbcType=VARCHAR}, </if> <if test="item.cCreater != null"> c_creater = #{item.cCreater,jdbcType=VARCHAR}, </if> <if test="item.dCreatedate != null"> d_createdate = #{item.dCreatedate,jdbcType=VARCHAR}, </if> <if test="item.delFlag != null"> del_flag = #{item.delFlag,jdbcType=VARCHAR}, </if> <if test="item.cTimestamp != null"> c_timestamp = #{item.cTimestamp,jdbcType=TIMESTAMP}, </if> <if test="item.cSw01 != null"> c_sw01 = #{item.cSw01,jdbcType=VARCHAR}, </if> <if test="item.cSw02 != null"> c_sw02 = #{item.cSw02,jdbcType=VARCHAR}, </if> <if test="item.cSw03 != null"> c_sw03 = #{item.cSw03,jdbcType=VARCHAR}, </if> <if test="item.cSw04 != null"> c_sw04 = #{item.cSw04,jdbcType=VARCHAR}, </if> <if test="item.cSw05 != null"> c_sw05 = #{item.cSw05,jdbcType=VARCHAR}, </if> <if test="item.cSw06 != null"> c_sw06 = #{item.cSw06,jdbcType=VARCHAR}, </if> <if test="item.cSw07 != null"> c_sw07 = #{item.cSw07,jdbcType=VARCHAR}, </if> <if test="item.cSw08 != null"> c_sw08 = #{item.cSw08,jdbcType=VARCHAR}, </if> <if test="item.cSw09 != null"> c_sw09 = #{item.cSw09,jdbcType=VARCHAR}, </if> <if test="item.cSw10 != null"> c_sw10 = #{item.cSw10,jdbcType=VARCHAR}, </if> <if test="item.cSw11 != null"> c_sw11 = #{item.cSw11,jdbcType=VARCHAR}, </if> <if test="item.cSw12 != null"> c_sw12 = #{item.cSw12,jdbcType=VARCHAR}, </if> <if test="item.cSw13 != null"> c_sw13 = #{item.cSw13,jdbcType=VARCHAR}, </if> <if test="item.cSw14 != null"> c_sw14 = #{item.cSw14,jdbcType=VARCHAR}, </if> <if test="item.cSw15 != null"> c_sw15 = #{item.cSw15,jdbcType=VARCHAR}, </if> <if test="item.cStirstate != null"> c_stirstate = #{item.cStirstate,jdbcType=VARCHAR}, </if> </set> where sk_no = #{item.skNo,jdbcType=VARCHAR} </foreach> </update> ``` 报的异常如下: SEVERE: Servlet.service() for servlet [MES] in context with path [/MES] threw exception [Request processing failed; nested exception is org.springframework.jdbc.BadSqlGrammarException: ### Error updating database. Cause: java.sql.SQLException: ORA-06550: 第 4 行, 第 7 列: PL/SQL: ORA-00971: 缺失 SET 关键字 ORA-06550: 第 2 行, 第 5 列: PL/SQL: SQL Statement ignored ORA-06550: 第 8 行, 第 7 列: PL/SQL: ORA-00971: 缺失 SET 关键字 ORA-06550: 第 6 行, 第 5 列: PL/SQL: SQL Statement ignored ### The error may involve td.young.smp.sm.bof.dao.TSM_CAS_R001Mapper.updateByPrimaryKeySelective-Inline ### The error occurred while setting parameters ### SQL: begin update TSM_CAS_R001 where sk_no = ? ; update TSM_CAS_R001 where sk_no = ? ;end; ### Cause: java.sql.SQLException: ORA-06550: 第 4 行, 第 7 列: PL/SQL: ORA-00971: 缺失 SET 关键字 ORA-06550: 第 2 行, 第 5 列: PL/SQL: SQL Statement ignored ORA-06550: 第 8 行, 第 7 列: PL/SQL: ORA-00971: 缺失 SET 关键字 ORA-06550: 第 6 行, 第 5 列: PL/SQL: SQL Statement ignored ; bad SQL grammar []; nested exception is java.sql.SQLException: ORA-06550: 第 4 行, 第 7 列: PL/SQL: ORA-00971: 缺失 SET 关键字 ORA-06550: 第 2 行, 第 5 列: PL/SQL: SQL Statement ignored ORA-06550: 第 8 行, 第 7 列: PL/SQL: ORA-00971: 缺失 SET 关键字 ORA-06550: 第 6 行, 第 5 列: PL/SQL: SQL Statement ignored ] with root cause java.sql.SQLException: ORA-06550: 第 4 行, 第 7 列: PL/SQL: ORA-00971: 缺失 SET 关键字 ORA-06550: 第 2 行, 第 5 列: PL/SQL: SQL Statement ignored ORA-06550: 第 8 行, 第 7 列: PL/SQL: ORA-00971: 缺失 SET 关键字 ORA-06550: 第 6 行, 第 5 列: PL/SQL: SQL Statement ignored 这是怎么回事?请大神看看。。我解决了半天感觉是一点问题没有啊?问什么老是报 这个异常呢?实在是解决不了啊。。。

hibernate级联更新会把外键id设置为null,而是直接删除不关联的数据

hibernate级联更新会把外键id设置为null,这样会留下脏数据,有什么方式可以让hibernate直接删除不关联的数据,再维护相关联数据。 相关代码: ``` package com.centerm.ivycloud.vcenter.vcompute.dao.instancedao.bean; import java.io.Serializable; import java.util.Date; import java.util.List; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.JoinTable; import javax.persistence.OneToMany; import javax.persistence.Table; import javax.persistence.Transient; import org.hibernate.annotations.Cascade; import org.hibernate.annotations.CascadeType; import org.hibernate.annotations.NotFound; import org.hibernate.annotations.NotFoundAction; /** * 临时实例,用来创建实例时使用 * @author wuyaozong * */ @Entity @Table( name = "vm" ) public class Instance implements Serializable{ /** * */ private static final long serialVersionUID = 1L; @Id @Column(name="id" ,unique=true) public String id; @Column(name="name") public String name; @Transient public String description; @Column(name="status") public String status; @Column(name="power_status") public String powerStatus; @NotFound(action=NotFoundAction.IGNORE) @OneToMany(targetEntity=VmNetwork.class, fetch=FetchType.EAGER) @JoinColumn(name="vm_id",referencedColumnName="id") @Cascade(value={CascadeType.ALL}) public List<VmNetwork> net; @Column(name="image_id") public String imageId; @Column(name="image_name") public String imageName; @Column(name="os_type") public String osType; @Column(name="os_name") public String osName; @Column(name="platform") public String osPlatform; @Column(name="cluster_id") public String clusterId; @Transient public String clusterName; @Transient public Cluster cluster; @Transient public Storage storage; @Column(name="cpu") public Integer cpu; @Column(name="ram") public Long memory; @Column(name="system_disk") public Integer systemDisk; @Column(name="storage_id") public String storageId; @Transient public String storageName; @NotFound(action=NotFoundAction.IGNORE) @OneToMany(targetEntity=Volume.class,fetch=FetchType.EAGER) @Cascade(value={CascadeType.ALL,CascadeType.DELETE}) @JoinTable(name="vm_volume_rel", joinColumns={@JoinColumn(name="vm_id",referencedColumnName="id")}, inverseJoinColumns={@JoinColumn(name="volume_id",referencedColumnName="id")}) public List<Volume> userDisks; @Column(name="is_persist") public boolean isPersist; @Column(name="delete_time") public Date deleteTime; @Transient public Date updatedTime; @Column(name="vm_type") public String vmType; @Column(name="error_des") public String errorDes; @Column(name="last_modify_result") public Integer lastModifyResult; @Column(name="sn" ,insertable=false,updatable=false) @GeneratedValue(strategy=GenerationType.IDENTITY) public Long sn; public Instance() { super(); } public Instance(String id,String name){ this.id=id; this.name=name; } public Instance(String id,String name,String status,String powerStatus, String imageId,String imageName,String osType, String osName,String osPlatform,String clusterId, Long memory, Integer cpu,String storageId, boolean isPersist,String vmType,Long sn ) { this.id=id; this.name=name; this.status=status; this.powerStatus=powerStatus; this.imageId=imageId; this.imageName=imageName; this.osType=osType; this.osName=osName; this.osPlatform=osPlatform; this.clusterId=clusterId; this.memory=memory; this.cpu=cpu; this.storageId=storageId; this.isPersist=isPersist; this.vmType=vmType; this.sn=sn; } } ``` ``` package com.centerm.ivycloud.vcenter.vcompute.dao.instancedao.bean; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name="vm_network") public class VmNetwork { @Id @Column(name="id") public long id; @Column(name="network_id") public String networkId=""; @Column(name="vm_id") public String vmId=""; @Column(name="mac") public String macAddr=""; @Column(name="fixed_ipv4") public String fixedIPV4=""; @Column(name="float_ipv4") public String floatIPV4=""; @Column(name="fixed_ipv6") public String fixedIPv6=""; @Column(name="float_ipv6") public String floatIPv6=""; public VmNetwork() { super(); } public VmNetwork(String networkId,String vmId,String macAddr,String fixedIpv4, String floatIpv4,String fixedIpv6,String floatIpv6) { this.networkId=networkId; this.vmId=vmId; this.macAddr=macAddr; this.fixedIPV4=fixedIpv4; this.floatIPV4=floatIpv4; this.fixedIPv6=fixedIpv6; this.floatIPv6=floatIpv6; } } ``` hibernate执行的sql语句: ``` Hibernate: update vm set cluster_id=?, cpu=?, delete_time=?, error_des=?, image_id=?, image_name=?, is_persist=?, last_modify_result=?, ram=?, name=?, os_name=?, platform=?, os_type=?, power_status=?, status=?, storage_id=?, system_disk=?, vm_type=? where id=? Hibernate: update vm_network set fixed_ipv4=?, fixed_ipv6=?, float_ipv4=?, float_ipv6=?, mac=?, network_id=?, vm_id=? where id=? Hibernate: update volume set create_time=?, description=?, encrypted=?, last_modify_result=?, name=?, size=?, status=?, storage_id=?, switch=? where id=? Hibernate: update volume set create_time=?, description=?, encrypted=?, last_modify_result=?, name=?, size=?, status=?, storage_id=?, switch=? where id=? Hibernate: update vm_network set vm_id=null where vm_id=? Hibernate: delete from vm_volume_rel where vm_id=? Hibernate: update vm_network set vm_id=? where id=? Hibernate: insert into vm_volume_rel (vm_id, volume_id) values (?, ?) Hibernate: insert into vm_volume_rel (vm_id, volume_id) values (?, ?) ``` 有什么方式,可以让hibernate先把已经与vm表不需要关联的vm_network数据删掉而不是把vm_network的vm_id设置为null,再更新关联关系?谢谢。

hibernate save新对象时出现属性全部为空异常

写代码时候要把一个用户对象保存到数据库,代码如下: ``` Account account = user; System.out.println(account.getUserid()); Session session = HibernateUtil.getSessionFactory().openSession(); session.beginTransaction(); session.save(account); session.getTransaction().commit(); session.close(); ``` 其中System.out那一步可以正确的输出id,但是控制台输出的SQL语句却是这样的: Hibernate: insert into account (email, firstname, lastname, status, addr1, addr2, city, state, zip, country, phone) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) values全部为空,然后程序报无法执行SQL的异常=。=不知道这是为什么,学生党,求大神前辈解救。。

大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了

大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

springboot+jwt实现token登陆权限认证

一 前言 此篇文章的内容也是学习不久,终于到周末有时间码一篇文章分享知识追寻者的粉丝们,学完本篇文章,读者将对token类的登陆认证流程有个全面的了解,可以动态搭建自己的登陆认证过程;对小项目而已是个轻量级的认证机制,符合开发需求;更多精彩原创内容关注公主号知识追寻者,读者的肯定,就是对作者的创作的最大支持; 二 jwt实现登陆认证流程 用户使用账号和面发出post请求 服务器接受到请求后使用私...

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

女程序员,为什么比男程序员少???

昨天看到一档综艺节目,讨论了两个话题:(1)中国学生的数学成绩,平均下来看,会比国外好?为什么?(2)男生的数学成绩,平均下来看,会比女生好?为什么?同时,我又联想到了一个技术圈经常讨...

总结了 150 余个神奇网站,你不来瞅瞅吗?

原博客再更新,可能就没了,之后将持续更新本篇博客。

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

程序员写出这样的代码,能不挨骂吗?

当你换槽填坑时,面对一个新的环境。能够快速熟练,上手实现业务需求是关键。但是,哪些因素会影响你快速上手呢?是原有代码写的不够好?还是注释写的不够好?昨夜...

外包程序员的幸福生活

今天给你们讲述一个外包程序员的幸福生活。男主是Z哥,不是在外包公司上班的那种,是一名自由职业者,接外包项目自己干。接下来讲的都是真人真事。 先给大家介绍一下男主,Z哥,老程序员,是我十多年前的老同事,技术大牛,当过CTO,也创过业。因为我俩都爱好喝酒、踢球,再加上住的距离不算远,所以一直也断断续续的联系着,我对Z哥的状况也有大概了解。 Z哥几年前创业失败,后来他开始干起了外包,利用自己的技术能...

优雅的替换if-else语句

场景 日常开发,if-else语句写的不少吧??当逻辑分支非常多的时候,if-else套了一层又一层,虽然业务功能倒是实现了,但是看起来是真的很不优雅,尤其是对于我这种有强迫症的程序"猿",看到这么多if-else,脑袋瓜子就嗡嗡的,总想着解锁新姿势:干掉过多的if-else!!!本文将介绍三板斧手段: 优先判断条件,条件不满足的,逻辑及时中断返回; 采用策略模式+工厂模式; 结合注解,锦...

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

2020阿里全球数学大赛:3万名高手、4道题、2天2夜未交卷

阿里巴巴全球数学竞赛( Alibaba Global Mathematics Competition)由马云发起,由中国科学技术协会、阿里巴巴基金会、阿里巴巴达摩院共同举办。大赛不设报名门槛,全世界爱好数学的人都可参与,不论是否出身数学专业、是否投身数学研究。 2020年阿里巴巴达摩院邀请北京大学、剑桥大学、浙江大学等高校的顶尖数学教师组建了出题组。中科院院士、美国艺术与科学院院士、北京国际数学...

为什么你不想学习?只想玩?人是如何一步一步废掉的

不知道是不是只有我这样子,还是你们也有过类似的经历。 上学的时候总有很多光辉历史,学年名列前茅,或者单科目大佬,但是虽然慢慢地长大了,你开始懈怠了,开始废掉了。。。 什么?你说不知道具体的情况是怎么样的? 我来告诉你: 你常常潜意识里或者心理觉得,自己真正的生活或者奋斗还没有开始。总是幻想着自己还拥有大把时间,还有无限的可能,自己还能逆风翻盘,只不是自己还没开始罢了,自己以后肯定会变得特别厉害...

男生更看重女生的身材脸蛋,还是思想?

往往,我们看不进去大段大段的逻辑。深刻的哲理,往往短而精悍,一阵见血。问:产品经理挺漂亮的,有点心动,但不知道合不合得来。男生更看重女生的身材脸蛋,还是...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

当HR压你价,说你只值7K,你该怎么回答?

当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫。 礼貌地说:“7K是吗?了解了。嗯~其实我对贵司的面试官印象很好。只不过,现在我的手头上已经有一份11K的offer。来面试,主要也是自己对贵司挺有兴趣的,所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣,公司职员印象上,都给予对方正面的肯定,既能提升HR的好感度,又能让谈判气氛融洽,为后面的发挥留足空间。...

面试:第十六章:Java中级开发

HashMap底层实现原理,红黑树,B+树,B树的结构原理 Spring的AOP和IOC是什么?它们常见的使用场景有哪些?Spring事务,事务的属性,传播行为,数据库隔离级别 Spring和SpringMVC,MyBatis以及SpringBoot的注解分别有哪些?SpringMVC的工作原理,SpringBoot框架的优点,MyBatis框架的优点 SpringCould组件有哪些,他们...

早上躺尸,晚上干活:硅谷科技公司这么流行迟到?

硅谷科技公司上班时间OPEN早已不是什么新鲜事,早九晚五是常态,但有很多企业由于不打卡,员工们10点、11点才“姗姗来迟”的情况也屡见不鲜。 这种灵活的考勤制度为人羡慕,甚至近年来,国内某些互联网企业也纷纷效仿。不过,硅谷普遍弹性的上班制度是怎么由来的呢?这种“流行性迟到”真的有那么轻松、悠哉吗? 《动态规划专题班》 课程试听内容: 动态规划的解题要领 动态规划三大类 求最值/计数/可行性 常...

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

终于懂了TCP和UDP协议区别

终于懂了TCP和UDP协议区别

Python爬虫,高清美图我全都要(彼岸桌面壁纸)

爬取彼岸桌面网站较为简单,用到了requests、lxml、Beautiful Soup4

无代码时代来临,程序员如何保住饭碗?

编程语言层出不穷,从最初的机器语言到如今2500种以上的高级语言,程序员们大呼“学到头秃”。程序员一边面临编程语言不断推陈出新,一边面临由于许多代码已存在,程序员编写新应用程序时存在重复“搬砖”的现象。 无代码/低代码编程应运而生。无代码/低代码是一种创建应用的方法,它可以让开发者使用最少的编码知识来快速开发应用程序。开发者通过图形界面中,可视化建模来组装和配置应用程序。这样一来,开发者直...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

Java岗开发3年,公司临时抽查算法,离职后这几题我记一辈子

前几天我们公司做了一件蠢事,非常非常愚蠢的事情。我原以为从学校出来之后,除了找工作有测试外,不会有任何与考试有关的事儿。 但是,天有不测风云,公司技术总监、人事总监两位大佬突然降临到我们事业线,叫上我老大,给我们组织了一场别开生面的“考试”。 那是一个风和日丽的下午,我翘着二郎腿,左手端着一杯卡布奇诺,右手抓着我的罗技鼠标,滚动着轮轴,穿梭在头条热点之间。 “淡黄的长裙~蓬松的头发...

大胆预测下未来5年的Web开发

在2019年的ReactiveConf 上,《Elm in Action》的作者Richard Feldman对未来5年Web开发的发展做了预测,很有意思,分享给大家。如果你有机会从头...

立即提问
相关内容推荐