首页 > 解决方案 > 休眠保存或更新会话不起作用

问题描述

我是hibernate的新手,并且正在从事一个项目,我想在有人购买会员资格时更新会员资格的到期日期。我编写了一个实现 AtributeConverter 的类。调用 buyMembership 方法后,两种打印方法都在打印正确的日期,但数据库没有得到更新。在控制台中,它显示只有选择查询正在运行。正在执行更新查询。参考代码供参考

USER_LOGIN 类

@Entity
@Table(name = "login")
public class User_Login {

    @Id
    @Column(name = "username")
    private String username;

    @Column(name = "password")
    private String password;

    @Column(name = "enabled")
    private Boolean enabled = false;
    
    @Column(name="start_date")
    private LocalDate startDate;
    
    @Column(name="end_date")
    private LocalDate expiryDate;

存储库

public void buyMembership(String months,String email) {
        
        Session currentSession = manager.unwrap(Session.class);
        
        User_Login user = currentSession.get(User_Login.class, email);
        
        LocalDate date = user.getExpiryDate();
        
        LocalDate current = LocalDate.now();
        
        if(date.compareTo(current)<0) {
            user.setStartDate(current);
            LocalDate newExpiryDate = current.plusMonths(Long.parseLong(months));
            System.out.println(newExpiryDate);
            user.setExpiryDate(newExpiryDate);
            user.setStartDate(current);
            //currentSession.saveOrUpdate(user);
        }
        else {
            LocalDate newExpiryDate = date.plusMonths(Long.parseLong(months));
            System.out.println(newExpiryDate);
            user.setExpiryDate(newExpiryDate);
            user.setStartDate(current);
            System.out.println(user.getExpiryDate());
            //currentSession.saveOrUpdate(user);
        }
        currentSession.update(user);
    
    }

属性转换器*

@Converter(autoApply = true)
public class LocalDatePersistenceConverter implements
    AttributeConverter<LocalDate, Date> {

    @Override
    public Date convertToDatabaseColumn(LocalDate attribute) {
        if(attribute==null)
            return null;
        return java.sql.Date.valueOf(attribute);
    }

    @Override
    public LocalDate convertToEntityAttribute(java.sql.Date dbData) {

        if(dbData==null)
            return null;
        return dbData.toLocalDate();
    }
    
    
}

在此处输入图像描述

标签: mysqlspringspring-boothibernate

解决方案


实际上,这是一个愚蠢的错误。我刚刚错过了将我的 buyMembership 服务标记为事务性的。在那之后,它就像一个魅力......


推荐阅读