我有两张桌子(比如表A和表B)。表B具有表A主键的外键。我使用netbeans IDE生成了我的java实体,现在我有了类似的东西:
表A:
@Entity
@Table(name = "WORKFLOW_TRANSACTION")
public class WorkflowTransaction implements {
@OneToMany(mappedBy = "wtId")
private Collection<WorkflowTask> workflowTaskCollection;
@Id
@Basic(optional = false)
@NotNull
@Column(name = "APP_ID")
private BigDecimal appId;
.
.
.
表B:
@Entity
@Table(name = "WORKFLOW_TASK")
public class WorkflowTask implements Serializable {
@JoinColumn(name = "WT_ID", referencedColumnName = "APP_ID")
@ManyToOne
private WorkflowTransaction wtId;
@Id
@Basic(optional = false)
@NotNull
@Column(name = "TASK_ID")
private BigDecimal taskId;
@Column(name = "STEP_NUM")
private BigInteger stepNum;
.
.
.
现在我的问题是:
答案 0 :(得分:1)
您有双向关联,因此您需要在Table B
实体类中设置Table A
属性,反之亦然。由于您尚未声明级联,因此需要先保存Table A
实体,然后再保存Table B
实体。
或者,如果保存Table B
然后保存Table A
实体类,则hibernate会生成额外的SQL update
命令以维持关系。
但是如果你希望在保存Table B
实体时hibernate保存Table A
实体,那么你需要添加Cascade属性:
@OneToMany(mappedBy = "wtId", cascade=CascadeType.ALL)
如果您使用Netbeans生成实体类,我认为您不会有任何缺点,它可以节省您编写实体的时间。但是如果你想学习,那么编写没有Netbeans的实体是好的。
答案 1 :(得分:0)
要实现此目的,您可以使用两种类型的技术XML映射或注释 在这两种技术中,共同点是使用 级联=“保存更新” 会发生什么是在一个表getter中设置一个属性,当插入一个关系表时它会自动插入到多个关系中