2016-12-07 128 views
0

我有一个加载存储库。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() 我得到错误信息库不是实体(它obiviously不是)。 这里我想根据某些条件完全删除entityA或entityB数据。我怎样才能做到这一点 ?

回答

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; 

,然后你可以调用删除方法,根据您的病情

repoA.deleteAll() 

repoB.deleteAll() 
0

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

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

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