【发布时间】:2014-11-20 00:31:29
【问题描述】:
有关用户信息,请参阅我有 user.java。
@Entity(name = "user")
@Table(name = "user")
public class User {
@Id
@Column(name = "id")
private String id;
@Column(name = "password")
private String password;
//getter and setter for this..
}
这是我的用户道
public class UserDao {
public interface UserDAO {
public String insert(User user);
}
}
这是插入数据库的 impl 类 看到这是我的代码。请检查并告诉我我做错了什么
@Repository
@Transactional
public class UserImpl implements UserDAO {
private DataSource dataSource;
@Autowired
SessionFactory sessionFactory;
@Resource(name = "sessionFactory")
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}
@Override
public String insert(User use) {
Session session = this.sessionFactory.openSession();
try{
Session sess = this.sessionFactory.getCurrentSession();
session.save(reg);
return (String)user.getUserName();
}catch(Exception e){
System.out.println("in catch"+e.getMessage());
e.printStackTrace();
}
}
}
}
成功注册后,在我的控制器中,我通过这个将数据插入到数据库中
userDao.insert(user);
但我没有得到输出意味着没有任何数据插入到数据库中。为什么会这样..?这是我的 mvc 配置
<context:component-scan base-package="com.user.xyz" />
<mvc:annotation-driven />
<mvc:resources mapping="/resources/**" location="/resources/images/, /resources/css/" />
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/view/" />
<property name="suffix" value=".jsp" />
</bean>
【问题讨论】:
-
我怀疑您可能只需要将
@Transactional注释添加到您的insert方法中。但是,您有一个 JPA 实体,那么您是否有理由不使用实体管理器?您不需要触摸 Hibernate 会话。另请注意,如果您将 Spring Data 添加到您的项目中,那么您可以删除您的实现并“免费”获得更多功能。 :) -
看看这是我的代码。请检查它并告诉我我做错了什么
-
没有错……只是有更简单的方法(更少的代码)可用。本教程提供了一个使用 Spring Data 的简短示例:spring.io/guides/gs/accessing-data-jpa ... 基本上,您将 Spring Data 添加到您的依赖项并修改您的接口以扩展 CrudRepository 或 JpaRepository。那么你就不需要编写自己的 DAO 实现了。
-
不是一个答案,但对于处理任何规模的任何事情,休眠比它的价值更麻烦。我不是第一个决定在应用程序完成后从应用程序中删除任何休眠功能的人,因为它根本无法大规模执行。
标签: java mysql spring hibernate