【发布时间】:2016-07-12 15:49:20
【问题描述】:
我的项目有问题。当我浏览http://localhost:8080/user/form 在直接http://localhost:8080/user/list 显示列表用户后填写用户信息时出现以下错误:
休眠:插入用户数据(密码、生日、年龄、性别、 用户名)值 s (?, ?, ?, ?, ?) Mar 25, 2016 5:05:04 AM org.hibernate.engine.jdbc.spi.SqlExceptionHelper$Standar dWarningHandler logWarning WARN:SQL 警告代码:10000,SQLState: 01J01 2016 年 3 月 25 日上午 5:05:04 org.hibernate.engine.jdbc.spi.SqlExceptionHelper$Standar dWarningHandler logWarning 警告:数据库 'D:\PROJECTSPRING\userdb' 未创建,而是与现有数据库建立连接。 3月25日, 2016 上午 5:05:04 org.hibernate.hql.internal.QueryTranslatorFactoryInitiat 或 启动服务信息:HHH000397:使用 ASTQueryTranslatorFactory Hibernate:选择 user0_.username 作为 username1_0_,user0_.password 作为 密码2_ 0_,用户0_.生日为生日3_0_,用户0_.年龄为年龄4_0_, user0_.gender 作为 gen der5_0_ 来自 userdat user0_ 2016 年 3 月 25 日 5:05:04 AM org.hibernate.engine.jdbc.spi.SqlExceptionHelper 日志异常 警告:SQL 错误:20000,SQLState:22005 2016 年 3 月 25 日上午 5:05:04 org.hibernate.engine.jdbc.spi.SqlExceptionHelper 日志异常错误: 尝试从数据中获取类型为“byte[]”的数据值 'VARCHAR' 类型的值。 [警告] org.springframework.web.util.NestedServletException:请求 处理失败;嵌套异常是 org.hibernate.exception.DataException:无法执行查询 在 org.springframework.web.servlet.FrameworkServlet.processRequest(框架 workServlet.java:973) 在 org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServl et.java:852) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:687) 在 org.springframework.web.servlet.FrameworkServlet.service(FrameworkSer
这里文件CustomContextLoaderListener.java
public class CustomContextLoaderListener extends ContextLoaderListener{
@Override
public void contextDestroyed(ServletContextEvent event) {
// TODO Auto-generated method stub
System.out.println("hibernate shutdown database");
try {
DriverManager.getConnection("jdbc:derby:D:/PROJECTSPRING/userdb;shutdown=true");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("\n Spring-MVC application destroyed \n");
super.contextDestroyed(event);
}
@Override
public void contextInitialized(ServletContextEvent event) {
// TODO Auto-generated method stub
System.out.println("\n Spring-MVC application inited \n");
try {
createTable();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
super.contextInitialized(event);
}
public void createTable() throws SQLException{
try {
Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
Connection connection = DriverManager.getConnection("jdbc:derby:D:/PROJECTSPRING/userdb;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();
}
}
public void createTableNotExist(Connection connection,
String tableName,String createTableSQL) throws SQLException{
DatabaseMetaData dbmd = connection.getMetaData();
ResultSet rs = dbmd.getTables(null, null,tableName.toUpperCase(), null);
if (rs.next()){
System.out.println("Table" + rs.getString("TABLE_NAME") + "already exists");
return;
}
System.out.println("anh yeu em");
Statement statement = connection.createStatement();
statement.execute(createTableSQL);
System.out.println("\n\n executed" + createTableSQL + "\n\n");
statement.close();
}
}
这里文件UserRestServiceController.java
@Controller
public class UserRestServiceController {
@Autowired
private UserDao userDao;
@Autowired
private View jsonView;
@RequestMapping(value="/user/form",method = RequestMethod.GET)
public ModelAndView user() {
// System.out.println("anh yeu em ");
ModelAndView model = new ModelAndView("UserForm", "User", new User());
model.addObject("allgender", Gender.values());
return model;
}
@RequestMapping(value="/user/save", method = RequestMethod.POST)
public ModelAndView saveUser(@ModelAttribute("User") User user,BindingResult result){
ModelAndView model = new ModelAndView();
System.out.println("anh yeu em ");
if (result.hasErrors()){
model = new ModelAndView("UserForm","User",user);
model.addObject("errors",result);
return model;
}
userDao.save(user);
model = new ModelAndView("redirect:/user/list");
return model;
}
@RequestMapping(value="/user/list",method = RequestMethod.GET)
public ModelAndView listUser(){
ModelAndView model = new ModelAndView();
List<User> listUser = userDao.listUsers();
model = new ModelAndView("UserList","Users",listUser);
return model;
}
@RequestMapping(value="/user/json/{username}")
public ModelAndView loadUser(@PathVariable("username")String name){
return new ModelAndView(jsonView,"data",userDao.loadUser(name));
}
@InitBinder
public void initBinder(WebDataBinder binder) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
}
}
这里文件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();
}
@Override
public void delete(User user) {
// TODO Auto-generated method stub
Session session = sessionFactory.getObject().openSession();
session.delete(user);
}
@Override
public User loadUser(String username) {
// TODO Auto-generated method stub
Session session = sessionFactory.getObject().openSession();
Query query = session.createQuery("from User "
+ "where username = :user_name");
query.setParameter("user_name",username);
return (User) query.uniqueResult();
}
}
这里文件User.java
@Entity
//@Table(name = "user",uniqueConstraints={@UniqueConstraint(columnNames="username")})
public class User {
// @Column(name = "gender", nullable = false)
// @Enumerated(EnumType.STRING)
public Gender getGender() {
return gender;
}
public void setGender(Gender gender) {
this.gender = gender;
}
// @Id
// @GeneratedValue(strategy = GenerationType.IDENTITY)
// @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;
}
这里文件User.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="edu.java.spring.service.user.model.User" table="userdat">
<id name="userName" column="username"/>
<property name="passWord" column="password"/>
<property name="birthDay" column="birthday"/>
<property name="age" column="age"/>
<property name="gender" column="gender" />
</class>
</hibernate-mapping>
【问题讨论】:
-
@Ralph 它显示
Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: userdat is not m apped [from userdat] -
@Ralph,你可以帮帮我!!!!
-
请也发布 User 类。
-
@Ralph,我已经在我的帖子上发布了 User.java
-
查看我的更新答案
标签: spring hibernate jetty derby