Spring Data JPA删除子实体

时间:2016-12-07 06:53:01

标签: spring jpa spring-data spring-data-jpa

我有一个加载存储库。

@Transactional
public interface MyLoadRepository extends CrudRepository<ParentEntity, Serializable> {
}

然后是我的ParentEntity。

@MappedSuperclass
public class ParentEntity {
    @Id
    @GeneratedValue(generator = "system-uuid")
    @GenericGenerator(name = "system-uuid", strategy = "uuid")
    @Column(name = "id", unique = true)
    private String uuid;

    public String getUuid() {
        return uuid;
    }

    public void setUuid(String uuid) {
        this.uuid = uuid;
    }

}

然后我有多个子实体。

  @Entity
   @Table(name = "EntityA")
    public class EntityA extends ParentEntity {
    }



  @Entity
  @Table(name = "EntityB")
  public class EntityB extends ParentEntity {
  }

问:我想通过我的存储库单独删除这些实体。

如果我写这样的话。

@Autowired
private MyLoadRepository repository;

然后repository.deleteAll() 我得到的错误是存储库不是实体(很明显不是)。 在这里,我想根据某些条件完全删除entityA或entityB数据。我怎么能这样做?

2 个答案:

答案 0 :(得分:0)

我们应该为每个实体创建存储库而不是非实体类。

因此,对于您的情况,您需要2个存储库类

@Transactional
public interface EntityARepo extends CrudRepository< EntityA, String> {
}

@Transactional
public interface EntityBRepo extends CrudRepository< EntityB, String> {
}

现在可以在服务类中执行

@Autowired
private EntityARepo repoA;

@Autowired
private EntityBRepo repoB;

然后你可以根据你的条件调用delete方法

repoA.deleteAll()

repoB.deleteAll()

答案 1 :(得分:0)

您需要根据条件获取实体。例如,如果EntityA具有主键uuid,则必须通过uuid找到EntityA,然后删除EntityA。

EntityA entityA = entityARepo.findOne(uuid); repository.delete(entityA);

EntityB entityB = entityBRepo.findOne(uuid); repository.delete(entityB);