每次调用 save() 之前更新实体的某个字段
Update a certain field of an entity everytime before calling save()
所以我有三个实体。 A、B和P(P超class)。他们是这样的:
@MappedSuperclass
public class P {
@Id
@GeneratedValue
protected Long id;
protected LocalDateTime lastUpdated = LocalDateTime.now();
//Other fileds, getters, setters, etc...
}
@Entity
@Table
public class A extends P {
//fileds, getters, setters, etc..
}
@Entity
@Table
public class B extends P {
//fileds, getters, setters, etc..
}
而且我有实体 A 和 B 的存储库
@Repository
public interface ARepository extends JpaRepository<A, Long> {
}
B 存储库
@Repository
public interface BRepository extends JpaRepository<B, Long> {
}
当我保存实体时,我必须每次都在 save() 之前调用 setter 方法来更新字段 lastUpdated
,如下所示:
@Service
public class AService {
private final ARepository aRepository;
@Autowired
public AService(ARepository aRepository){
this.aRepository= aRepository;
}
public A doSomethingToA(A a){
//Run some logic here...
a.setLastUpdated(LocalDateTime.now()); // I dont want this line one very update method of every entity. is there a way to put it inside the save() method (overriding or something), or any other solution to this?
return aRepository.save(a);
}
}
这里的问题是,如果我有 200 个扩展 class P 的实体,我必须在每次调用 save() 之前调用此 setLastUpdated()
方法。无论如何我可以把这一行放在保存方法中吗? (无需覆盖扩展 P 的 200 个实体的所有 200 个存储库上的保存)。
您可以在 class P 上使用 Hibernate 的 EntityListener
:
public class P {
@PreUpdate
@PrePersist
public void setLastUpdated() {
lastUpdated = LocalDateTime.now();
}
}
关于它的官方文档:https://docs.jboss.org/hibernate/stable/entitymanager/reference/en/html/listeners.html
所以我有三个实体。 A、B和P(P超class)。他们是这样的:
@MappedSuperclass
public class P {
@Id
@GeneratedValue
protected Long id;
protected LocalDateTime lastUpdated = LocalDateTime.now();
//Other fileds, getters, setters, etc...
}
@Entity
@Table
public class A extends P {
//fileds, getters, setters, etc..
}
@Entity
@Table
public class B extends P {
//fileds, getters, setters, etc..
}
而且我有实体 A 和 B 的存储库
@Repository
public interface ARepository extends JpaRepository<A, Long> {
}
B 存储库
@Repository
public interface BRepository extends JpaRepository<B, Long> {
}
当我保存实体时,我必须每次都在 save() 之前调用 setter 方法来更新字段 lastUpdated
,如下所示:
@Service
public class AService {
private final ARepository aRepository;
@Autowired
public AService(ARepository aRepository){
this.aRepository= aRepository;
}
public A doSomethingToA(A a){
//Run some logic here...
a.setLastUpdated(LocalDateTime.now()); // I dont want this line one very update method of every entity. is there a way to put it inside the save() method (overriding or something), or any other solution to this?
return aRepository.save(a);
}
}
这里的问题是,如果我有 200 个扩展 class P 的实体,我必须在每次调用 save() 之前调用此 setLastUpdated()
方法。无论如何我可以把这一行放在保存方法中吗? (无需覆盖扩展 P 的 200 个实体的所有 200 个存储库上的保存)。
您可以在 class P 上使用 Hibernate 的 EntityListener
:
public class P {
@PreUpdate
@PrePersist
public void setLastUpdated() {
lastUpdated = LocalDateTime.now();
}
}
关于它的官方文档:https://docs.jboss.org/hibernate/stable/entitymanager/reference/en/html/listeners.html