2012-07-31 76 views
2

我有一个基于Hibernate的关系的问题:麻烦与Hibernate实体关系

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

我有一个Solicitud有很多DetalleAccesorio,我需要保存SolicitudDetalleAccesorio,无一不是在databa diferents表SE ..这是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

你在问什么需要保存Solicitud表的主键?另外,你收到了什么错误? – Woot4Moo 2012-07-31 20:38:17

+0

用Solicitud的主键设置DetalleAccesorio的主键并保存。 – roaro 2012-07-31 20:43:47

+0

好的,发生了什么?是抛出异常还是不持久? – Woot4Moo 2012-07-31 20:46:43

回答

1

基本上,你必须设置在儿童实体(DetalleAccesorio)之间的关系,如:

@ManyToOne 
Solicitud codDetalle 

看看这个thread也该documentation

0

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

,你可以在双向看到有(和我不认为你需要,所以去除通过映射,它会被解决)你的代码需要保持2个方向:由

变化只有到协会的反向结束时才会持续存在 。

0

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

如果你愿意从DetalleAccesorio访问Solicitud
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; 
0

这是从实体代码DetalleAccesorio

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

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

和ID “codDetalle” 必须来自同一ID Solicitud保存它(numSolicitud)...