java - 设置对象时保留对象的值

标签 java hibernate spring jpa persistence

我是 JPA+Hibernate+Spring 的新手(但我对用于 Web 应用程序和 SQL 的 Spring 框架有相当多的经验)所以我的问题可能不是在 JPA 中使用正确的技术术语。

我有一个典型的 User POJO,它用 javax.persistence.* 注释,我已经根据我发现的示例设置了 hibernate+hsqldb,这些示例目前运行良好. User 类如下所示:

@Entity
@Table(name = "USER")
public class User {

    private Long id;
    private String name;
    // Ignore id getter and setter methods

    @Column(name = "USER_NAME")
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

这是我的 UserDAOImpl 类。

public class UserDAOImpl implements UserDAO {

    private HibernateTemplate hibernateTemplate;

    public void setSessionFactory(SessionFactory sessionFactory) {
        this.hibernateTemplate = new HibernateTemplate(sessionFactory);
    }

    @Override
    public void saveUser(User user) {
        hibernateTemplate.saveOrUpdate(user);
    }

    // This method is made to return only one User object.
    @Override
    @SuppressWarnings("unchecked")
    public User getGiUser() {
        return hibernateTemplate.find("from User where User_Name ='gi'").get(0);
    }
}

通过使用 getGiUser 方法,我可以从数据库中获取持久对象(如果我理解正确的话)。我的问题是是否可以使 User.setName() 方法在调用时立即提交到数据库而无需手动保存?我应该如何或从哪里开始或了解这方面的知识?

最佳答案

据我所见,您正在寻找调用 UserDAO 的服务 bean:

public class UserServiceImpl implements UserService {
    private UserDAO userDao;    // injected by Spring

    @Transactional
    public void changeUserName(String name) {
        User user = userDao.getGiUser();
        user.setName(name);
        // I can't remember if this saveUser() call is required, or if
        // Hibernate will automatically pick up the changes and save the 
        // user object
        userDao.saveUser(user);
    }
}

@Transactional 来自这里:

http://static.springsource.org/spring/docs/current/spring-framework-reference/html/transaction.html

此外,使用 HibernateTemplate 不再是使用 Hibernate 的首选方式。 Spring 文档的这一部分展示了如何直接使用 Hibernate 代码:

http://static.springsource.org/spring/docs/current/spring-framework-reference/html/orm.html

然而,您实际上可能更喜欢将 Hibernate 用作 Spring 的 JPA 2 提供程序; ORM 章节(上文)还展示了如何将 JPA 与 Spring 集成。 Hibernate 仍然可以继续作为您的 JPA 2 提供者。这样您就可以将所有代码与 Spring 和 Hibernate 分离,并且只需将标准 JPA 2 注释与 EntityManager 一起使用。

关于java - 设置对象时保留对象的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5873899/

相关文章:

spring - 检查Apache Velocity中的映射是否为空

java - 比较 hibernate 映射日期?

java - CDI 将服务注入(inject) JPA 托管实体

java - Powermock ExceptionInInitializerError 与 Junit

java - 如何处理响应代码?

hibernate - 使用DerbyDB进行一对多双向关系的Hibernate注释映射

java - 用于设置/获取 p :selectBooleanCheckbox 值的表达式语言

java - RestyGWT 和 GWT 集成

java - 3D 宇宙中的 Z 是什么?

java - 有人可以帮助我理解为什么这个答案需要 IF 和 WHILE 吗?