麻烦Hibernate实体关系

时间:2012-07-31 20:32:33

标签: java hibernate composite-key

我对Hibernate的关系有问题:

我有两个实体 - > Solicitud DetalleAccesorio ,关系是:

我有一个 Solicitud 和许多 DetalleAccesorio ,我需要使用 DetalleAccesorio 保存 Solicitud ,两者都是数据库中的差异表..这是 Solicitud 的重要代码:

@Id @GeneratedValue( strategy=GenerationType.IDENTITY ) @Column( name="num_solicitud" ) private Long numSolicitud;

 @OneToMany( fetch=FetchType.LAZY, mappedBy="codDetalle", cascade={ CascadeType.ALL } )
 private List<DetalleAccesorio> listaAccesorios;     `

我需要在DetalleAccesorio上保存Solicitud的相同主键吗?

4 个答案:

答案 0 :(得分:1)

基本上你必须在子实体(DetalleAccesorio)中设置关系,如:

@ManyToOne
Solicitud codDetalle

查看此thread以及此documentation

答案 1 :(得分:0)

从关系中删除mappedBy="codDetalle"。通过创建双向关系映射。在bidorectional关系中,与mapby(onetomany)的一方不再对关系进行控制。这就是hibernate dosnt认识到这里存在关系的原因。 如果你想要双向而不是实现它需要。意味着双方都需要注释和重要的部分 - 你必须在两个方面维护java的引用! look on this.

你可以看到双向(我不认为你需要,所以删除映射的,它将被解决)你需要在代码中保持2个方向:

  

仅对关联的反向结束所做的更改不是   持续存在。

答案 2 :(得分:0)

实际上它有一个非常简单的解决方案
如果您愿意从Solicitud访问DetalleAccesorio
DetalleAccesorio课程中你必须有这个:

@ManyToOne(fetch=fetchType.EAGER)
Solicitud codDetalle

这是可选的。

(这不是可选的)在Solicitud 试试这个:

@OneToMany(fetch=FetchType.LAZY)
@JoinTable(name = "Solicitud_DetalleAccesorio_MAPPING", joinColumns = @JoinColumn(name = "DetalleAccessorio_ID"), inverseJoinColumns = @JoinColumn(name = "Solicitu_ID"))
List<ManagerDetails> managerDetails;

答案 3 :(得分:0)

这是来自实体DetalleAccesorio的代码

@Id
@Column( name="cod_detalle" )
private Long codDetalle;

@Column( name="cod_accesorio" )
private Integer codAccesorio;

ID“codDetalle”必须与Solicitud的id相同才能保存(numSolicitud)......