我有一个加载存储库。
@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数据。我怎么能这样做?
答案 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);