为什么Hibernate可以实现SQL Server查询和删除修改的功能,但是不能进行插入数据库
ID  int  主键
USERNAME    varchar(255)
USERPASSWORD   varchar(255)
USERREALNAME   varchar(255)hibernate配置文件User.hbm.xml
<hibernate-mapping>
    <class name="com.edu.entity.user.User" table="USER1">
        <id name="userId" type="java.lang.Integer">
            <column name="ID" />
            <generator class="native" />
        </id>
        <property name="userName" type="java.lang.String">
            <column name="USERNAME" />
        </property>
        <property name="userPassword" type="java.lang.String">
            <column name="USERPASSWORD" />
        </property>
        <property name="userRealName" type="java.lang.String">
            <column name="USERREALNAME" />
        </property>
    </class>
 
</hibernate-mapping>
对数据库的操作
package com.edu.dao;import java.util.List;import javax.annotation.Resource;import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
public class DaoHibernate<T> implements IBaseDao<T> {
@Resource//@Autowired
private SessionFactory sessionFactory; public SessionFactory getSessionFactory() {
return sessionFactory;
} public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
} @Override
public int insert(T o) {
 sessionFactory.getCurrentSession().save(o);
 return 1;
} @Override
public int insertList(List<T> list) {
for (T t : list) {
insert(t);
}

return list.size();
} @Override
public int update(T o) {
sessionFactory.getCurrentSession().update(o);
return 1; } @Override
public int deleteList(Class c, int[] ids) {
for (int id : ids) {
delete(c, id);
}
return ids.length;
} @Override
public int delete(T o) {
sessionFactory.getCurrentSession().delete(o);
return 1;
} @Override
public int delete(Class c, int id) { Session s = sessionFactory.getCurrentSession();
s.delete(s.load(c, id));
return 1;
} @Override
public T findById(Class c, int id) { return (T) sessionFactory.getCurrentSession().get(c, id); } @Override
public T findOne(String hql, String[] param) { // 查询单条记录 Session s = sessionFactory.getCurrentSession();
Query query = s.createQuery(hql);
if (param != null) {
for (int i = 0; i < param.length; i++) {
query.setParameter(i, param[i]);
}
}
return (T) query.uniqueResult(); } @Override
public List<T> find(String hql, String[] param) {
List<T> list = null;
Session s = sessionFactory.getCurrentSession();
Query query = s.createQuery(hql);
if (param != null) {
for (int i = 0; i < param.length; i++) {
query.setParameter(i, param[i]);
}
}
return query.list();  } @Override
public List<T> findPage(String hql, String[] param, int page, int size) { // 分页查找所有对象
List<T> list = null;
Session s = sessionFactory.getCurrentSession();
Query query = s.createQuery(hql);
if (param != null) {
for (int i = 0; i < param.length; i++) {
query.setParameter(i, param[i]);
}
}
// 筛选条数
query.setFirstResult((page - 1) * size);
query.setMaxResults(size);
return query.list(); } @Override
public int getCount(String hql, String[] param) {// 返回数据个数
int resu = 0;
Session s = sessionFactory.getCurrentSession();
Query q = s.createQuery(hql);
if (param != null) {
for (int i = 0; i < param.length; i++) {
q.setString(i, param[i]);
}
}
resu = Integer.valueOf(q.iterate().next().toString()); return resu;
} @Override
// 单字段模糊查询
public List<T> findByFields(String hql, String fields[], String condition) {
Session s = null;
String findhql = hql;
if (fields != null && condition != null && fields.length > 0
&& !condition.equals("")) {
findhql = findhql + " where 1=1 and (";
for (int i = 0; i < fields.length - 1; ++i) {
findhql += fields[i] + " like '%" + condition + "%' or ";
}
findhql += fields[fields.length - 1] + " like '%" + condition
+ "%') ";
}
 s = sessionFactory.getCurrentSession();
Query query = s.createQuery(findhql);
List<T> list = query.list();
return list;

}}package com.edu.dao.user;
import org.springframework.stereotype.Repository;import com.edu.dao.DaoHibernate;
import com.edu.entity.user.User;
@Repository
public class UserDao extends DaoHibernate<User> {
// 通过姓名、密码查询用户
public User findBynameAndPassword(User user) {
String hql = "from User u where u.userName=? and u.userPassword=?";
String param[] = { user.getUserName(), user.getUserPassword() };
User user1 = this.findOne(hql, param);
return user1;
} // 通过姓名查询用户
public User findByname(User user) {


String hql = "from User u where u.userName=?";
String param[] = { user.getUserName() };
User user1 = this.findOne(hql, param);
return user1;
} // 修改用户密码: 修改 对象user的密码为newPasswoed
public int updatePassword(User user, String newPassword) {
User user1 = this.findBynameAndPassword(user);
//judge user1  null
if(user1!=null) {
user1.setUserPassword(newPassword);
return this.update(user1);}
else 
return 0;
}}

解决方案 »

  1.   

    我没有在数据库端设置自增长
    页面报错是这样的:
    Struts has detected an unhandled exception:Messages: 1????????????
                     1could not execute statement
    File: com/microsoft/sqlserver/jdbc/SQLServerException.java
    控制台提示的信息:
    六月 28, 2018 1:39:56 下午 org.hibernate.hql.internal.ast.HqlSqlWalker generatePositionalParameter
    WARN: [DEPRECATION] Encountered positional parameter near line 1, column 50 in HQL: [from com.edu.entity.user.User u where u.userName=?].  Positional parameter are considered deprecated; use named parameters or JPA-style positional parameters instead.
    Hibernate: select user0_.ID as ID1_2_, user0_.USERNAME as USERNAME2_2_, user0_.USERPASSWORD as USERPASS3_2_, user0_.USERREALNAME as USERREAL4_2_ from USER1 user0_ where user0_.USERNAME=?
    Hibernate: insert into USER1 (USERNAME, USERPASSWORD, USERREALNAME) values (?, ?, ?)
    六月 28, 2018 1:39:56 下午 org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
    WARN: SQL Error: 0, SQLState: null
    六月 28, 2018 1:39:56 下午 org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
    ERROR: 已生成用于更新的结果集。
      

  2.   

    应该是hibernate自己建好表,设置了自增长
      

  3.   

    <generator class="native" />
    是利用数据库端的自动增长,需要在数据库端将主键设为自动增长。
    如果没设的话设一下。
      

  4.   

    贴下插入操作的controller代码及异常信息
      

  5.   

    上面有贴过一次Hibernate: select user0_.ID as ID1_2_, user0_.USERNAME as USERNAME2_2_, user0_.USERPASSWORD as USERPASS3_2_, user0_.USERREALNAME as USERREAL4_2_ from USER1 user0_ where user0_.USERNAME=?
    Hibernate: insert into USER1 (USERNAME, USERPASSWORD, USERREALNAME) values (?, ?, ?)
    六月 28, 2018 4:21:16 下午 org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
    WARN: SQL Error: 0, SQLState: null
    六月 28, 2018 4:21:16 下午 org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
    ERROR: 已生成用于更新的结果集。
      

  6.   

    需要catch到的异常,你发的日志看不出什么