我希望能够在持久保存 Spring 数据之前使用一些更复杂的保存逻辑。
我有这个 JpaRepository :
public interface MyClassRepository extends JpaRepository<MyClass, Long> {
@Query("from com.package.MyClass as myClass where myClass.parent is null");
MyClass getRootMyClass();
...
}
这个实体:
@Entity
@Table("MY_CLASS")
public class MyClass {
@ManyToOne
@JoinColumn("parent_id")
MyClass parent;
}
我希望能够检查父属性是否为 null,然后在存储库中设置根 myClass。例如,像这样:
if(myClass.getParent() == null) {
myClass.setParent(getRootMyClass());
}
我无法使用实体中的 @PrePersist
Hook 来执行此操作,因为它不知道存储库。我无法在存储库中执行此操作,因为它是一个接口(interface),而不是一个类。最好把它放在哪里?
最佳答案
如果您使用的是JDK8,您可以将以下方法添加到MyClassRepository
:
public interface MyClassRepository extends JpaRepository<MyClass, Long> {
@Query("from com.package.MyClass as myClass where myClass.parent is null")
MyClass getRootMyClass();
default void checkSave(MyClass myClass) {
if (myClass.getParent() == null) {
myClass.setParent(getRootMyClass());
}
save(myClass);
}
}
然后,您应该调用 checkSave() 而不是 save()
关于java - 使用 Spring Data 预填充数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47836721/