我对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的相同主键吗?
答案 0 :(得分:1)
答案 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)......