2016-12-07 3 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 { 
    } 

Ques: Я хочу удалить эти объекты отдельно своим хранилищем.

Если я напишу что-то вроде этого.

@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, то вы должны найти EntityA по uuid, а затем удалить EntityA.

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

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

Смежные вопросы