java - 使用 Spring Data 预填充数据

标签 java spring spring-data spring-data-jpa

我希望能够在持久保存 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/

相关文章:

java - 通过 Xtend ActiveAnnotations 自动实现接口(interface)

java - Spring jdbcTemplate @transactional 不回滚 postgres

java - 如何使用Spring操作生产数据库数据格式?

spring - 如何在 Grails Spock 单元测试中初始化/连接 bean?

java - 继承 : using base class or derived class to do stuff

java - 意图不起作用。第二个 Activity 启动错误

java - 调用模拟函数时更新非模拟对象

java - ResultSetExtractor 中 getInt 的性能问题

java - 空 Autowiring 字段

spring - Spring JPA::找不到能够从类型转换的转换器