2016-12-07 127 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);