2

我对 Hibernate 的关系有疑问:

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

我有一个带有许多DetalleAccesorio的Solicitud,我需要用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;     `

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

4

4 回答 4

1

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

@ManyToOne
Solicitud codDetalle

看看这个线程和这个文档

于 2012-08-01T00:16:45.350 回答
0

mappedBy="codDetalle"从关系中删除。通过创建双向关系映射。在双向关系中,mappedby(onetomany)的一方不再控制关系。这就是hibernate不承认这里有关系的原因。如果您想要双向而不是按需要实现它。意味着双方都需要注释和重要部分-您必须以两种方式维护java中的引用! 看看这个。

正如您在双向中看到的那样(我认为您不需要,所以删除映射的,它将被解决)您需要在代码中维护 2 个方向:

仅对关联的反向端所做的更改不会保留。

于 2012-08-01T06:17:52.650 回答
0

这是来自实体 DetlleAccesorio 的代码

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

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

并且 id "codDetalle" 必须与 Solicitud 的 id 相同才能保存它 (numSolicitud)...

于 2012-08-01T13:34:59.110 回答
0

事实上,它有一个非常简单的解决方案

如果你愿意访问Solicitudfrom 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;
于 2012-08-01T09:35:05.503 回答