gpt4 book ai didi

java - Hibernate:暂时排除列并更新

转载 作者:行者123 更新时间:2023-11-30 09:52:40 25 4
gpt4 key购买 nike

假设我有一张这样的 table

USER_ID     USERNAME     PASSWORD     DATE_CREATED    DATE_LAST_LOGIN
1 'user1' 'password1' '12-Jun-2010' '12-Nov-2010'
2 'user2' 'password2' '14-Jun-2010' '12-Nov-2010'

像这样使用 hibernate 映射到 POJO 类

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

private Integer id;
private String username;
private String password;
private Date dateCreated;
private Date dateLastLogin;

public User() {
}

@Id
@GeneratedValue( strategy = GenerationType.IDENTITY )
public IntegergetId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

@Colum( name="USERNAME" )
public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

@Colum( name="PASSWORD" )
public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password= password;
}

@Colum( name="DATE_CREATED" )
public Date getDateCreated() {
return dateCreated;
}

public void setDateCreated(Date dateCreated) {
this.dateCreated= dateCreated;
}

@Colum( name="DATE_LAST_LOGIN" )
public Date getDateLastLogin() {
return dateLastLogin;
}

public void setDateLastLogin(Date dateLastLogin) {
this.dateLastLogin = dateLastLogin;
}

}

这个类将以两种方式使用,1. 验证用户登录,当用户登录时,DATE_LAST_LOGIN 将更新为当前日期。2. 在用户编辑表单中更新用户详细信息。

我的问题是我只想在用户登录时更新 DATE_LAST_LOGIN 字段,而不是在编辑表单中的用户时。如果我要加载一条用户记录,然后在不调用 setDateLastLogin 的情况下保存它,那么在加载和更新操作之间用户登录之前,这会很好。这将导致 DATE_LAST_LOGIN 在数据库中更新,但是当用户编辑表单保存更改时,它将用旧的、不正确的值覆盖 DATE_LAST_LOGIN。

编辑:

我认为我没有完全解释情况,所以这里有更多信息......这是专门在网络应用程序中发生的,用户的更新就是这样发生的。

  1. 加载用户记录并用于填充 html 表单
  2. 表单被编辑并提交回服务器
  3. 服务器提交对数据库的更改

就目前而言,我不会在更新表单提交之前再次从数据库中查询对象,我只是用表单中的字段填充一个新对象并将其保存到数据库中,这当然意味着 dateLastLogin 为空在保存更新时,因此将在数据库中用 null 替换正确的值。这显然不能通过简单的同步线程来解决。在 hibernate 之前,我会简单地选择不更新 DATE_LAST_LOGIN 字段,但 hibernate 不允许我做出设计时的决定。

另一种方法是在用表单中的字段覆盖之前查询对象,但是这迫使我必须在更新之前运行查询,如果没有 hibernate 我就不必这样做,这将迫使我使用一个答案中建议的同步。问题是同步只适用于当前应用程序,如果我有多个应用程序更新同一个数据库,那么它就没用了。

回到我原来的问题,有没有办法从更新中排除该字段,如果不是简单地要求 hibernate 这样做,那么可能是通过不同的系统设计。

最佳答案

我的建议是为用户使用 2 个不同的实体,例如UserUserLogin(后者将扩展常规 User 并保留 dateLastLogin 属性)并使用 UserLogin 在身份验证期间和简短的 User 在编辑用户详细信息时。

关于java - Hibernate:暂时排除列并更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4162928/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com