2016-12-07 4 views
0

J'ai un référentiel de charge.Printemps données JPA supprimer les entités enfants

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

Puis c'est mon 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; 
    } 

} 

Ensuite, j'ai plusieurs entités enfants.

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



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

Questionnaire: Je souhaite supprimer ces entités séparément par mon référentiel.

Si j'écris quelque chose comme ça.

@Autowired 
private MyLoadRepository repository; 

puis-je obtenir repository.deleteAll() erreur dépôt n'est pas une entité (Il obiviously pas). Ici, je souhaite supprimer les données entityA ou entityB en fonction de certaines conditions. Comment puis je faire ça ?

Répondre

0

Nous devrions créer un référentiel par entité et non sur des classes non-entité.

Alors, pour votre cas, vous avez besoin de 2 classes de dépôt

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

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

maintenant dans des classes de service que vous pouvez faire

@Autowired 
private EntityARepo repoA; 

@Autowired 
private EntityBRepo repoB; 

et vous pouvez appeler supprimer la méthode en fonction de votre état

repoA.deleteAll() 
ou
repoB.deleteAll() 
0

Vous devez extraire l'entité en fonction d'une condition. Par exemple, si EntityA possède une uuid de clé primaire, vous devez rechercher EntityA par uuid, puis supprimer EntityA.

EntityA entityA = entitéARepo.findOne (uuid); repository.delete (entityA);

EntitéB entityB = entityBRepo.findOne (uuid); repository.delete (entityB);