Opa galera, tudo blz?
Estou penando pra conseguir resolver um probleminha aqui e decidi pedir ajuda à vcs.
Como sou iniciante em hibernate (e no resto tbm :lol: ) … não estou conseguindo achar a solução
É o seguinte:
Preciso cadastrar um documento no banco de dados. Esse documento tem um Cliente (fk), porém pode ou não ter um Navio(fk).
Ambos, o cliente e o navio, já estarão cadastrados previamente na base de dados.
O problema é: quando cadastro um documento que tem navio tudo ocorre bem, mas se tento cadastrar um documento sem navio recebo a excessão:
object references an unsaved transient instance - save the transient instance before flushing: modelo.Navio
Pesquisando, descobri que teria que salvar minha classe Navio antes de Salvar o documento … Porém ao fazer o documento é criado, mas também é criado um novo navio em branco na base de dados …
Como fazer pra não ocorrer a criação desse registro em branco???
Segue minhas classes e o metodo para cadastrar o documento:
Classe do Documento
[code]@Entity()
@Table(name=“controle_documentos_empresa”)
public class ControleDocumentosEmpresa extends org.apache.struts.action.ActionForm implements Serializable {
private static final long serialVersionUID = 1L;
public ControleDocumentosEmpresa(){
ConvertUtils.register(new ConversorData(), Date.class);
}
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column()
private int controle_cod;
@Column()
@Temporal(javax.persistence.TemporalType.DATE)
private Date data_emissao;
@Column()
@Temporal(javax.persistence.TemporalType.DATE)
private Date data_validade;
@Column()
@Version
private Timestamp update_em;
@Column()
private String update_por;
@Column()
private String comentarios;
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name=“cliente_cod”, nullable=true)
@Fetch(FetchMode.JOIN)
private Cliente cliente = new Cliente();
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name=“reparticao_cod”)
@Fetch(FetchMode.JOIN)
private Reparticao reparticao = new Reparticao();
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name=“doc_cod”)
@Fetch(FetchMode.JOIN)
private Doc doc = new Doc();
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name=“cod”, referencedColumnName=“cod”, nullable=true)
@Fetch(FetchMode.JOIN)
private Navio navio = new Navio();
//getters e setters[/code]
Classe Navio
[code]@Entity()
@Table(name=“navio”)
public class Navio extends org.apache.struts.action.ActionForm implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue()
@Column(name=“cod”)
private int cod;
@Column()
private String nome;
@Column(unique=true)
private String imo;
@Column()
private String bandeira;
@Column()
private String numeroegistro;
@Column()
private String inscricaocp;
@Column()
private String portoregistro;
@Column()
private String licconstrucao;
@Column()
private String classeembarcacao;
@Column()
private String tipoembarcacao;
@Column()
private String irin;
@Column()
private String classificadora;
@Column()
private String comprimento;
@Column()
private String boca;
@Column()
private String pontal;
@Column()
private String calado;
@Column()
private String ab;
@Column()
private String al;
@Column()
private String tpb;
@Column()
private String construtor;
@Column()
private String batquilha;
@Column()
private String entradaeaceitacao;
@Column()
private String materialconstrucao;
@Column()
private String combustivel;
@Column()
private String propulsao;
@Column()
private String motores;
@Column()
private String potenciamotores;
@Column()
private String fabricantemotor;
@Column()
private String fretador;
@Column()
private String afretador;
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name=“cliente_cod”)
@Fetch(FetchMode.JOIN)
@Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
private Cliente cliente = new Cliente();
@OneToMany(mappedBy=“navio”, fetch=FetchType.LAZY)
private List controle;
//getters e setters[/code]
Classe Cliente
[code]@Entity()
@Table(name=“cliente”)
public class Cliente extends org.apache.struts.action.ActionForm implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column()
private int cliente_cod;
@Column()
private String razao;
@Column(unique=true)
private String cnpj;
@Column()
private String tel1;
@Column()
private String tel2;
@Column()
private String fax;
@Column()
private String email;
@Column()
private String logadouro;
@Column()
private int numero;
@Column()
private String bairro;
@Column()
private String complemento;
@Column()
private String cidade;
@Column()
private String estado;
@Column()
private String cep;
@OneToMany(mappedBy=“cliente”, fetch=FetchType.LAZY)
private List navio;
@OneToMany(mappedBy=“cliente”, fetch=FetchType.LAZY)
private List controle;
//getters e setters[/code]
Metodo para cadastrar o documento
public void novoControle(ControleDocumentosEmpresa controle)throws Exception{
session = HibernateUtil.getSession();
transaction = session.beginTransaction();
session.save(controle.getNavio());
session.save(controle);
transaction.commit();
session.flush();
}
Gente agradeceria muito se alguem me ajudasse a resolver esse problema