JPA sequence manual

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.