JPA One To Many Unidirectional Mapping

1 resposta
C

Fala ae galera, blz?

Estou com um problema!

tenho as seguintes classes:

@Entity
@Table(name="LOJ_ANALISE_CREDITO")
public class AnaliseCredito implements Serializable {

	@Id
	@GeneratedValue(generator="LOJ_ANALISE_CREDITO", strategy=GenerationType.SEQUENCE)
	@SequenceGenerator(sequenceName="LOJ_ANALISE_CREDITO_SEQ", name="LOJ_ANALISE_CREDITO", allocationSize=1)
	private Long id;
	
	@Column(name="CPF_CNPJ")
	private String cpfCnpj;
	
	@Column(name="DATA_ANALISE")
	@Temporal(TemporalType.DATE)
	private Date dataAnalise;
	
	@OneToMany
	@Cascade(value={CascadeType.SAVE_UPDATE, CascadeType.DELETE})
	@JoinTable(name="LOJ_ITEM_ANALISE", joinColumns=@JoinColumn(name="ID"), inverseJoinColumns=@JoinColumn(name="ID_ANALISE"))
	private List<ItemAnalise> itensAnalise;

	...
}
@Entity
@Table(name="LOJ_ITEM_ANALISE")
public class ItemAnalise implements Serializable {

	@Id
	@GeneratedValue(generator="LOJ_ITEM_ANALISE", strategy=GenerationType.SEQUENCE)
	@SequenceGenerator(sequenceName="LOJ_ITEM_ANALISE_SEQ", name="LOJ_ITEM_ANALISE", allocationSize=1)
	private Long id;
	
	@Column(name="TIPO_REGISTRO")
	private Integer tipoRegistro;
	
	@Column(name="CONTEUDO_REGISTRO")
	private String conteudoRegistro;

	...
}

e as seguintes tabelas

LOJ_ANALISE_CREDITO
   ID
   CPF_CNPJ
   DATA_ANALISE
LOJ_ITEM_ANALISE
   ID
   TIPO_REGISTRO
   CONTEUDO_REGISTRO
   ID_ANALISE

soh que ocorre o seguinte erro:
cannot insert NULL into (“LOJ_ITEM_ANALISE”.“ID_ANALISE”)

olhei os inserts, para LOJ_ANALISE_CREDITO ele gera certinho

insert 
into
    LOJ_ANALISE_CREDITO
    (CPF_CNPJ, DATA_ANALISE, id) 
values
    (?, ?, ?)

mas para a tabela LOJ_ITEM_ANALISE ele não insere a coluna mencionada no erro

insert 
into
    LOJ_ITEM_ANALISE
    (CONTEUDO_REGISTRO, TIPO_REGISTRO, id) 
values
    (?, ?, ?)

Alguem já passou por isso e sabe como fazer ele inserir o ID_ANALISE, utilizando relacionamento unidirecional?

Muito obrigado

1 Resposta

J

@JoinTable(name="LOJ_ITEM_ANALISE", joinColumns=@JoinColumn(name="ID"), inverseJoinColumns=@JoinColumn(name="ID_ANALISE")), eh uma anotação para ser utilizada em conjunto com @ManyToMany, que indica o nome da tabela intermediaria que faz a ligação do relacionamento.

No seu caso, você tem um relacionamento @OneToMany, e para indicar o nome da coluna de join precisa da anotação @JoinColumn que vai indicar o nome da coluna de join!

Tenta:

@OneToMany @Cascade(value={CascadeType.SAVE_UPDATE, CascadeType.DELETE}) @JoinColumn(name="ID_ANALISE") private List<ItemAnalise> itensAnalise;

Criado 19 de julho de 2010
Ultima resposta 19 de jul. de 2010
Respostas 1
Participantes 2