Bom dia pessoal…
Eu tenho um relacionamento OneToOne…
@Entity
@Table(name = "SIGGASM2_SUBINVENTORY")
@SequenceGenerator(name="SIGGASM2_SUBI_SUBINVENTORY_SEQ",sequenceName="SIGGASM2_SUBI_SUBINVENTORY_SEQ", allocationSize=1)
public class HandSubInventory implements Serializable, TreeNode {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SIGGASM2_SUBI_SUBINVENTORY_SEQ")
@Column(name = "SUBINVENTORY_ID")
private long subinvId;
@Column(name = "SUBINVENTORY_CODE")
private String subinvCode;
@Column(name = "SUBINVENTORY_NAME")
private String subinvName;
//resto dos atributos...
e a outra classe eu tenho o seguinte relacionamento…
@Entity
@Table(name="SIGGASM2_PARAMETERS")
@SequenceGenerator(name="SIGGASM2_PARA_PARAMETERS_I_SEQ", sequenceName="SIGGASM2_PARA_PARAMETERS_I_SEQ", allocationSize=1)
public class HandParameters implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator ="SIGGASM2_PARA_PARAMETERS_I_SEQ")
@Column(name="PARAMETERS_ID")
private long parametersId;
@OneToOne(fetch = FetchType.EAGER)
@JoinColumn(name="SUBINVENTORY_ID", insertable=true, updatable=true)
@Fetch(FetchMode.JOIN)
@Cascade(CascadeType.SAVE_UPDATE)
private HandSubInventory handSubInventoryId;
Entao eu adiciono um HandSubInventory na minha classe HandParameters para salvar no banco… pelo relacionamento, o hibernate teria que salvar o HandSubinventory primeiro e depois pegar o ID que foi salvo e salvar na tabela HandParameters… so q isso nao ta acontecendo…
ORA-02291: integrity constraint (MRSSM2DES.FK_HAND_PARAMET_SUBINV_ID) violated - parent key not found
se eu simplesmente salvar a classe HandSubinventory ele salva no banco corretamente… Oq eu preciso fazer para ele salvar no banco o HandSubinventory, pegar o ID que foi salvo e depois salvar na tabela HandParameters?
Desde já agradeço…
Não sei se é o correto mais tente definir o atributo TargetEntity dentro da anotação @OneToOne
Ex:
@OneToOne(targetEntity=HandSubInventory.class)
caso não seja isso peço desculpas, e vou acompanhar o resto das respostar para aprender de fato o erro.
abraçoss
Bom dia Tenkara Kiddo,
O negocio nao é isso cara… o Hibernate consegue reconhecer a targetEntity pelo proprio Atributo. Meu atributo ja é do tipo HandSubInventory.
Mesmo assim, Obrigado pela atençao e ajuda.
Aguardando respostas…
Alguem tem alguma ideia gente?
Fico aguardando…
Muito obrigado…
eu acredito que na sua classe HandParameters voce terá que colocar mapeamento para HandSubInventory
@OneToOne (mappedBy ="handSubInventoryId")
private HandSubInventory handSub;
depois voce paassa o objeto HandSubInventory para HandParameters e vice versa;
exemplo
HandSubInventory hand = new HandSubInventory();
HandParameters handParameteters = new HandParameters();
hand.sethandSub(handParameteters);
handParameteters .setHandSubInventory(hand);
na tenho ctz , mas pode ser isso.
Bom dia Ricardo…
Eu tentei fazer da seguinte forma…
//Classe HandParameters
@OneToOne(mappedBy="parameters", fetch = FetchType.EAGER)
@JoinColumn(name="SUBINVENTORY_ID", insertable=true, updatable=true)
@Fetch(FetchMode.JOIN)
@Cascade(CascadeType.SAVE_UPDATE)
private HandSubInventory handSubInventoryId;
//Classe HandSubInventory
@OneToOne(mappedBy="handSubInventoryId", fetch=FetchType.LAZY)
@Cascade(CascadeType.ALL)
private HandParameters parameters;
A aplicação dá o seguinte erro…
ERROR [STDERR] org.hibernate.AnnotationException: Unknown mappedBy in: br.com.sigga.model.HandSubInventory.parameters, referenced property unknown: br.com.sigga.model.HandParameters.handSubInventoryId
Eu nao sei oq pode ser significar… Voê pode me ajudar nesse mapeamento?
Muito obrigado pela ajuda cara…
abraços
Eu acredito que seja pelo uso de 2 mappedBy…
tente deixar assim
//Classe HandParameters
@OneToOne(mappedBy="parameters", fetch = FetchType.EAGER)
@JoinColumn(name="SUBINVENTORY_ID", insertable=true, updatable=true)
@Fetch(FetchMode.JOIN)
@Cascade(CascadeType.SAVE_UPDATE)
private HandSubInventory handSubInventoryId;
//Classe HandSubInventory
@OneToOne(fetch=FetchType.LAZY)
@Cascade(CascadeType.ALL)
private HandParameters parameters;
Se nao der certo, da uma olhada nessa apostila na pagina 52 , eu fiz seguindo ela , nao tem erro…
http://www.google.com.br/#hl=pt-BR&&sa=X&ei=50lQTISGJ4SBlAe4-dS6CQ&ved=0CBcQBSgA&q=hibernate+com+anotações&spell=1&fp=1&cad=b
é o primeiro pdf que aparece.
Ricardo… Muito obrigado pela ajuda cara… Consegui resolver aki…
Ah, a apostila parece ser muito boa… Dei uma passada nela e principalmente na pagina que você falou sobre o meu problema… Fica o link ai para quem quiser aprender mais sobre Hibernate e anotations.
Obrigado…