【发布时间】:2016-03-27 08:56:17
【问题描述】:
我的项目有问题。当我浏览http://localhost:8080/user/form 填写用户信息时
然后提交表单保存用户并自动直接http://localhost:8080/user/list显示列表用户,但出现以下错误:
休眠:插入用户数据(年龄、生日、性别、密码、 用户名)值 s (?, ?, ?, ?, ?) Mar 27, 2016 8:30:17 AM org.hibernate.engine.jdbc.spi.SqlExceptionHelper$Standar dWarningHandler logWarning WARN:SQL 警告代码:10000,SQLState: 01J01 2016 年 3 月 27 日上午 8 点 30 分 17 秒 org.hibernate.engine.jdbc.spi.SqlExceptionHelper$Standar dWarningHandler logWarning 警告:数据库 'D:\PROJECTSPRING\userdb' 未创建,而是与现有数据库建立连接。 3月27日, 2016 年上午 8 点 30 分 17 秒 org.hibernate.hql.internal.QueryTranslatorFactoryInitiat 或 启动服务信息:HHH000397:使用 ASTQueryTranslatorFactory Hibernate:选择 user0_.username 作为 username1_0_,user0_.age 作为 age2_0_, user0_ .birthday 作为birthday3_0_, user0_.gender 作为 性别 4_0_,user0_.password 作为密码 5_0_ 来自 userdat user0_ Mar 2016 年 2 月 27 日上午 8:30:17 org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExce ptions WARN:SQL 错误:20000,SQLState:22018 2016 年 3 月 27 日 上午 8:30:17 org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExce 选项错误:int 类型的字符串格式无效。 [警告] org.springframework.web.util.NestedServletException:请求 处理失败;嵌套异常是 org.hibernate.exception.DataException:无法执行查询
原因:org.hibernate.exception.DataException:无法执行 询问 在 org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQL ExceptionTypeDelegate.java:52) 在 org.hibernate.exception.internal.StandardSQLExceptionConverter.conver t(标准SQLExceptionConverter.java:42) 在 org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlException Helper.java:111)
原因:java.sql.SQLDataException:无效的字符串格式 对于类型 i nt。 在 org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(未知 n 来源) 在 org.apache.derby.impl.jdbc.Util.generateCsSQLException(未知来源 ) 在 org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException (来源不明)
这里是 UserDaoImpl.java 文件
@Repository
public class UserDaoImpl implements UserDao{
@Autowired
public LocalSessionFactoryBean sessionFactory;
@Override
public void save(User user) {
// TODO Auto-generated method stub
Session session = sessionFactory.getObject().openSession();
session.save(user);
session.flush();
session.close();
}
@Override
public void update(User user) {
// TODO Auto-generated method stub
}
@Override
public List<User> listUsers() {
// TODO Auto-generated method stub
Session session = sessionFactory.getObject().openSession();
Query query = session.createQuery("from User");
return (List<User>)query.list();
}
这里是 User.java 文件
@Entity
@Table(name = "userdat",uniqueConstraints={@UniqueConstraint(columnNames="username")})
public class User {
@Column(name = "gender", nullable = false)
public Gender getGender() {
return gender;
}
public void setGender(Gender gender) {
this.gender = gender;
}
@Id
@Column(name = "username", unique = true, nullable = false)
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
@Column(name = "password", nullable = false)
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
@Column(name = "birthday", nullable = false)
public Date getBirthDay() {
return birthDay;
}
public void setBirthDay(Date birthDay) {
this.birthDay = birthDay;
}
@Column(name="age", nullable = false)
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
private String userName;
private String passWord;
private Date birthDay;
private Integer age;
private Gender gender;
}
这里是 Gender.java 文件
public enum Gender {
MALE("Male"),
FEMALE("Female"),
OTHER("Other");
private String name;
private Gender(String name) {
this.name = name;
}
public String getGender(){
return this.name;
}
}
这里在数据库中创建表
public void createTable() throws SQLException{
try {
Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
Connection connection = DriverManager.getConnection("jdbc:derby:D:/PROJECTSPRING/dbuser;create=true");
createTableNotExist(connection,"userdat", "create table userdat"
+ "(username varchar(1000) primary key,"
+ "password varchar(1000),birthday date,"
+ "age integer,gender varchar(100))");
// createTableNotExist(connection,"subject","create table subject"
// + "(id bigint primary key generated always as identity(start with 1,increment by 1),"
// + "title varchar(1000),student integer,score integer)" );
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
【问题讨论】:
-
尝试在
Gender类上使用Embeddable注释,在User类中的Gender字段上使用Embedded注释。参考link查看用法。 -
@MadhusudanaReddySunnapu,我已经尝试过你的方式,但是当我
mvn jetty:run运行服务器但出现错误时: -
引起:org.springframework.beans.factory.BeanCreationException:无法自动连接字段:私有edu.java.spring.service.user.dao.UserDao edu.java.spring.s ervice。 user.controller.UserRestServiceController.userDao;嵌套异常是或 g.springframework.beans.factory.BeanCreationException:创建名为“userDaoImpl”的 bean 时出错:注入自动装配的依赖项失败;嵌套异常
-
是 org.springframework.beans.factory.BeanCreationException:无法自动装配字段:public org.springframework.orm.hibernate4.LocalSessionFactoryBean edu.jav a.spring.service.user.dao.impl.UserDaoImpl .sessionFactory;嵌套异常是 o rg.springframework.beans.factory.BeanCreationException:在 ServletContext 资源 [/WEB-INF/userservice-servlet.xml] 中定义名称为“sessionFactory”的 bean 创建错误:调用 init 方法失败;嵌套异常是 org.hibernate e.HibernateException: Unable to instantiate default tuplizer [org.hibernate.tupl e.component.PojoComponentTuplizer]
-
@MadhusudanaReddySunnapu,你还有别的办法????