E ai pessoal, tudo bem?
Estou desenvolvendo uma aplicação com JPA2.0.
Tenho uma entidade a qual consigo persistir, todavia não consigo fazer update nos relacionamentos oneToMany
@Entity
@Table(name = "cesta")
public class Cesta implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(unique = true, nullable = false)
int id
@Column(length = 150, nullable = false)
String nome
@Column(length = 1)
String identificador
@Lob
String descricao
@ElementCollection
@CollectionTable(name="palavra_chave")
List<PalavraChave> palavraChave = new ArrayList<PalavraChave>()
@OneToMany(mappedBy = "cesta", cascade = CascadeType.ALL)
List<CestaCha> cha = new ArrayList<CestaCha>()
Caso eu retire algum elemento da lista de palavraChave ou da lista cha, ele não retira do banco de dados com update.
A aplicação não dá erro, diz que foi atualizado, mas o banco continua igual como estava.
Para dar update nas entidades utilizo o seguinte código.
esta com EllementCollection pq é um atributo multivalorado, poderia ter feito também com outro relacionamento como vc falou, mas fiz assim para nao ter de fazer outra entidade.
esta com EllementCollection pq é um atributo multivalorado, poderia ter feito também com outro relacionamento como vc falou, mas fiz assim para nao ter de fazer outra entidade.
[/quote]PalavraChave já não é uma outra entidade?
Sempre vi EllementCollection sendo utilizado com String, Enum e assim vai…
Nesse site tem um exemplo com telefones, no meu caso aqui, esta funcionando para persistir, mas quando vou dar um update e antes eu acrescento ou retiro um elemento da lista ele não atualiza.
[quote=ATEN]
Nesse site tem um exemplo com telefones, no meu caso aqui, esta funcionando para persistir, mas quando vou dar um update e antes eu acrescento ou retiro um elemento da lista ele não atualiza.
[/quote]Mas no caso telefone não é uma Entidade, é um embbeded (não sei se a sua classe é uma entidade):@Embeddable
public class Phone {
private String type;
private String areaCode;
@Column(name="P_NUMBER")
private String number;
...
}
Note também a diferença em como ele anotou a lista dele e como você anotou sua lista.
[quote=Hebert Coelho][quote=ATEN]
Nesse site tem um exemplo com telefones, no meu caso aqui, esta funcionando para persistir, mas quando vou dar um update e antes eu acrescento ou retiro um elemento da lista ele não atualiza.
[/quote]Mas no caso telefone não é uma Entidade, é um embbeded (não sei se a sua classe é uma entidade):@Embeddable
public class Phone {
private String type;
private String areaCode;
@Column(name="P_NUMBER")
private String number;
...
}
Note também a diferença em como ele anotou a lista dele e como você anotou sua lista.[/quote]
Sim é verdade no caso do @ElementCollection esta estranho mesmo, mas pq eu nao consigo entao pelo menos atualizar a outra lista, quando eu dou merge?
@OneToMany(mappedBy = "cesta", cascade = CascadeType.ALL)
List<CestaCha> cha = new ArrayList<CestaCha>()
[quote=ATEN]Sim é verdade no caso do @ElementCollection esta estranho mesmo, mas pq eu nao consigo entao pelo menos atualizar a outra lista, quando eu dou merge?
@OneToMany(mappedBy = "cesta", cascade = CascadeType.ALL)
List<CestaCha> cha = new ArrayList<CestaCha>() [/quote]Não sei. Eu teria que olhar mais código para imaginar.
Talvez outra pessoa possa ver e matar a charada.
Eu inicializo sim a transação, tenho um singleton para inicializar o EntityManagerFactory e quando busco o entity manager eu o devolvo iniciando a transação.