gpt4 book ai didi

java - 将 @PrePersist 和 @PreUpdate 与 Ebean 和 Play 2.5.x 一起使用不起作用?

转载 作者:行者123 更新时间:2023-11-30 06:52:15 24 4
gpt4 key购买 nike

我有一个奇怪的问题,当我按照简单的记录方式去做时,我无法理解为什么会这样,我有以下实体:

@Entity
@Table(name = "users")
public class User extends Model {
@Id
@Column
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;

@Column
@CreatedTimestamp
private DateTime createdDate;

@Column
@UpdatedTimestamp
private DateTime updatedDate;

@Column
@Version
private long version = 0;

@Column(length = 35, nullable = false)
@Constraints.Required
@Constraints.MinLength(2)
@Constraints.MaxLength(50)
private String firstName;

@Column(length = 35, nullable = false)
@Constraints.Required
@Constraints.MinLength(2)
@Constraints.MaxLength(50)
private String lastName;

@Column(length = 256)
@Constraints.MaxLength(256)
private String jobTitle;

@Column(length = 1000)
@JsonIgnore
private String options;

@Transient
private Map<String, Object> properties = new HashMap<>();

@PrePersist
protected void prePersist() throws IOException {
Logger.warn("PrePersist called");
}

@PreUpdate
protected void preUpdate() throws IOException {
Logger.warn("PreUpdate called");
}

@PostLoad
private void postLoad() throws IOException {
Logger.warn("PostLoad called");
}
// settlers and getters here

}

然后对于新用户,我调用 Controller 或服务:

User user = new User();
user.setFirstName("Someone").setLastName("Last Name"); // etc
//then
user.insert();
// or you can even try
// user.save();

我正在尝试保存新用户和更新用户,让用户在调试时获取断点而不是调用具有 @PrePersist 的方法, @PreUpdate@PostLoad但它们根本没有被调用,在实际应用中我做了一些从 JSON 字符串到 Map options 的转换至 properties反之亦然。

应该支持:http://ebean-orm.github.io/docs/features/eventlistening

我正在使用 play 2.5.6 和 sbt-play-ebean 3.0.2 .

最佳答案

好吧,我不确定这是一个愚蠢的错误还是被误解了,但问题是这些方法有错误的访问修饰符。

它们必须是public,而不是protectedprivate:

@PrePersist
public void prePersist() throws IOException {
Logger.warn("PrePersist called");
}

@PreUpdate
public void preUpdate() throws IOException {
Logger.warn("PreUpdate called");
}

@PostLoad
public void postLoad() throws IOException {
Logger.warn("PostLoad called");
}

编辑:以防万一,如果 @Transient 列被修改,@PreUpdatePrePersist 将不起作用。

关于java - 将 @PrePersist 和 @PreUpdate 与 Ebean 和 Play 2.5.x 一起使用不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39276430/

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