Pessoal,
Com faço para informar ao jpa que um campo pk de uma tabela será adicionado manualmente? Quero setar a pk na classe principal e ela é fk em outras tabelas
Obrigado
Pessoal,
Com faço para informar ao jpa que um campo pk de uma tabela será adicionado manualmente? Quero setar a pk na classe principal e ela é fk em outras tabelas
Obrigado
Se não me engano, é não anotar o método com @GeneratedValue …
Retirando o @GeneratedValue eu obtenho um Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1
Nesse caso ele não coloca a pk como fk nas demais tabelas
Alguma ideia?
Poste suas entidades… A entidade que você quer atualizar e a entidade do relacionamento…
Poste tbm a classe que está usando para inserir os registros…
Segue,
Uma Nota tem N Item.
Na nota tem uma lista de Itens e no item tem uma referencia para nota.
Quero colocar a chave pk da nota manualmente. No item ela é fk…
public class Nota implements IBasicoPojo,Serializable {
@Id
@Basic(optional = false)
@Column(name = "pk", nullable = false)
private Long nfePk;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "nfeFk")
private List<Item> item;
public class Item implements IBasicoPojo, Serializable {
@Id
@Basic(optional = false)
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "pkItem", nullable = false)
private Long nfeItemPk;
@JoinColumn(name = "pk", referencedColumnName = "pk", nullable = false)
@ManyToOne
private Nota nota
Obrigado.
Então… Vi um errinho no seu relacionamento:
Altere isso:
@OneToMany(cascade = CascadeType.ALL, mappedBy = "nfeFk")
private List<Item> item;
Para isso:
@OneToMany(cascade = CascadeType.ALL, mappedBy = "nota")
private List<Item> item;
Poste a classe que está usando para inserir o registro…Onde está levantando a exceção…
Erro
Caused by: XXXX.exceptions.TransactionException: org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1
A persistencia está correta. Eu persistia utilizando sequence automatica do bd e funcionava, o problema e devido a uma nova regra de negocio, preciso substituir a sequence automatica por um valor manual.
Tudo bem que funcionava… Mas qual interface de persistência você está utiliando EntityManager ou Session??? Qual método você está utilizando?? (persist , merge , saveOrUpdate , update , save) ? Se for o Enitty Manager ele possui transaçoes gerenciadas pelo container, ou pela aplicação ??
EntityManager, persist e gerenciado pela aplicação.
Sérgio você deu um setNfePk antes de persistir??? Se sim, vc tem certeza que este id que você setou não existe no banco ???
Estranho que pela exceção que você passou parece que você está tentando updatar um registro que não existe…
O pai e setado no filho e o fliho é setado no pai, além disso estou fazendo um persist e o bd esta vazio.
Quando gero a seq do pai automaticamente funciona, quando mudamos para manual apresenta esse erro.