为什么Hibernate可以实现SQL Server查询和删除修改的功能,但是不能进行插入

nodelxq 2018-06-28 01:29:19
为什么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;
}

}
...全文
227 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
nodelxq 2018-06-28
  • 打赏
  • 举报
回复
不是很懂去哪里找?
QWERT4745 2018-06-28
  • 打赏
  • 举报
回复
需要catch到的异常,你发的日志看不出什么
nodelxq 2018-06-28
  • 打赏
  • 举报
回复
上面有贴过一次 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: 已生成用于更新的结果集。
QWERT4745 2018-06-28
  • 打赏
  • 举报
回复
贴下插入操作的controller代码及异常信息
nodelxq 2018-06-28
  • 打赏
  • 举报
回复
这个早就设置好的,但是不行
nodelxq 2018-06-28
  • 打赏
  • 举报
回复
nodelxq 2018-06-28
  • 打赏
  • 举报
回复
已经设置好了的
stacksoverflow 2018-06-28
  • 打赏
  • 举报
回复
<generator class="native" />
是利用数据库端的自动增长,需要在数据库端将主键设为自动增长。
如果没设的话设一下。
nodelxq 2018-06-28
  • 打赏
  • 举报
回复
应该是hibernate自己建好表,设置了自增长
nodelxq 2018-06-28
  • 打赏
  • 举报
回复
我没有在数据库端设置自增长 页面报错是这样的: 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: 已生成用于更新的结果集。
stacksoverflow 2018-06-28
  • 打赏
  • 举报
回复
报什么错?数据库端有没有对逐渐设置自动增长?

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧