【发布时间】:2017-10-18 07:18:14
【问题描述】:
我有父实体 Head 和关联的子实体是使用 onetomany 映射的 Detail 和 Comment。我只有一个 DAO,即 HeadDao。项目编号 PK 在 Head 和 FK 在 Detail 和 Comment。我试图弄清楚如何使用 projectNumber 删除子评论而不为孩子编写 DAO。
场景是,在更新 Head 时,我想首先从数据库中删除现有的(关联的)评论(使用 projectNumber),然后添加请求中的新 cmets。任何人都可以帮我解决这个问题。 下面是实体类(仅供参考,评论类有复合 id,但我没有在这里粘贴)
@Entity(name = "Head")
@Table(name = "HEAD")
public class Head {
@Id
@Column(name = "PRJ_NBR")
private Integer projNumber;
@JsonIgnore
@OneToMany(mappedBy = "head",cascade = CascadeType.ALL,orphanRemoval =
true,fetch = FetchType.LAZY)
private List<Detail> detailsList = new ArrayList<Detail>();
@JsonIgnore
@OneToMany(mappedBy = "head",cascade = CascadeType.ALL,orphanRemoval =
true,fetch = FetchType.LAZY)
private List<Comment> commentsList = new ArrayList<Comment>();
}
@Entity
@Table(name = "PRJ_CMT")
@JsonIgnoreProperties
public class Comment {
@Transient
private Integer projectNumber;
@JsonIgnore
@EmbeddedId
private CommentCompositeId id;
@JsonIgnore
@ManyToOne
@JoinColumn(name = "PRJ_NBR", updatable=false, insertable=false)
private Head head;
}
@Transactional
@Repository
@PersistenceContext(type = PersistenceContextType.EXTENDED)
public abstract interface HeadDao extends JpaRepository<Head,
Serializable>
{
public abstract List<Head> findByProjNumber(Integer paramInteger);
public abstract List<Head> findAll();
@SuppressWarnings("unchecked")
public abstract Head saveAndFlush(Head paramHead);
public abstract List<Head> findByCusSysId(Integer paramInteger);
public abstract Integer deleteByProjNumber(Integer projNumber);
}
While adding i'm using below code
this.headDao.saveAndFlush(head);
【问题讨论】:
标签: java spring hibernate jpa spring-data-jpa