java - I can't get cascade to work on an entity,Hibernate -


i have entity has 2 many-to-one relationships, , 1 of them cascades on save fine , other 1 returns:

exception in thread "main" org.hibernate.transientobjectexception: object references  unsaved transient instance - save transient instance before flushing : dto.publicschema.pessoas 

here code of entity works:

@entity @table(name="`doc_tipo`", schema="public") public class doc_tipo implements serializable {  private static final long serialversionuid = 1859372890916956036l;  @id @column(nullable=false) private int tp_doc; @column(nullable=false,columndefinition="char(255)") private string descricao; @column(nullable=false,columndefinition="char(255)") private string tp_emissor;  //getters , setters } 

and here code of entity not allow cascade:

@entity @table(name="`pessoas`", schema="public") public class pessoas implements serializable {  private static final long serialversionuid = 8292302132119274975l;  @id @generatedvalue @column(nullable=false,columndefinition="serial not null") private int seq_pessoa;   static date padrao_dt_criacao = new date(); @column(nullable=false, columndefinition="date not null") private date dt_criacao = padrao_dt_criacao;  @column(columndefinition="char(255)") private string nome;  @column(columndefinition="char(1) null") private char tp_pessoa;  @column(columndefinition="char(255)") private string fantasia;  @column(columndefinition="varchar(25)") private string idioma;  @column(columndefinition="varchar(25)") private string login;  @column(columndefinition="varchar(25)") private string senha;      static date padrao_dt_i = new date(); @column(nullable=false, columndefinition="date not null") private date dt_i = padrao_dt_i;  //pessoa está ativa para o sitema se este campo estiver em branco @column(columndefinition="date") private date dt_f;   @column(columndefinition="oid") private int foto;     //getters , setters    }    

and here class has relationships many-to-one 2 above cascade work on first one:

@entity @table(name="`documentos`", schema="public") public class documentos implements serializable {  private static final long serialversionuid = -4874330647877687810l;  @id @manytoone(cascade=cascadetype.all) @joincolumn(name="seq_pessoa",columndefinition="integer",referencedcolumnname="seq_pessoa",nullable=false) private pessoas seq_pessoa;  @id @generatedvalue @column(nullable=false,columndefinition="serial not null") private int cd_doc;  @manytoone(cascade=cascadetype.all) @joincolumn(name="tp_doc",referencedcolumnname="tp_doc",nullable=false) private doc_tipo tp_doc;  @column(nullable=false) private int tp_emissor;  @column(nullable=false,columndefinition="char(2) not null default 'df'::bpchar") private string tp_emissor_uf="df";  @column(columndefinition="char(5)") private string alfa_doc;  @column(nullable=false,columndefinition="char(20)") private string nr_doc;  //data de validade documento @column(columndefinition="date") private date dt_f_valid;  @transient transient static date padrao_dt_i = new date(); @column(columndefinition="date default now()") private date dt_i = padrao_dt_i;  @column(columndefinition="date") private date dt_f;     //getters , setters } 

when go save documentos object hibernate inserts doc_tipo in table supposed to, , instead of inserting pessoa object throws me exception.

here class manipulates session(it's tests):

public class hibernate {    public static sessionfactory getsessionfactory() {      sessionfactory sessionfactory = null;     try {         configuration configuration = new configuration();          configuration.configure();          serviceregistry  serviceregistry = new  serviceregistrybuilder().applysettings(          configuration.getproperties()).buildserviceregistry();          sessionfactory = configuration.buildsessionfactory(serviceregistry);     } catch (hibernateexception hbe) {          hbe.printstacktrace();      }      return sessionfactory; }  public static void main(string[] args) {       sessionfactory sessionfactory = getsessionfactory();     session session = sessionfactory.opensession();     session.begintransaction();       pessoas = new pessoas();     a.setdt_criacao(new date());     a.setdt_f(new date());     a.setdt_i(new date());     a.setfantasia("teste");     a.setfoto(12);     a.setidioma("aa");     a.setlogin("aa");     a.setnome("aa");     a.setsenha("a");     a.settp_pessoa('h');        doc_tipo b = new doc_tipo();     b.setdescricao("aa");     b.settp_doc(5);     b.settp_emissor("aaa");       documentos c = new documentos();      c.setalfa_doc("aaa");     c.setdt_f(new date());     c.setdt_f_valid(new date());     c.setdt_i(new date());     c.setnr_doc("aa");     c.setseq_pessoa(a);     c.settp_doc(b);     c.settp_emissor(1);     c.settp_emissor_uf("aa");      //session.save(a);     session.save(c);          session.gettransaction().commit();     session.close();    }  } 

if remove comment on save() pessoas object, works fine, shouldn't have that, same exception happens when try cascade save in entity has many-to-one relationship pessoas too.

documentos references pessoas primary key (pessoas.seq_pessoa) created after has been saved/flushed database pessoas uses serial. there nothing reference before save/persist happens.

also, shouldn't use multiple @id annotations define composite identity unless defining @idclass holds aforementioned @id fields. or @embeddedid annotation well. jpa supports 2 different approaches compound pks. in each case there must pk class includes fields.

a) multiple @id fields/attributes on entity. names , types of fields in entity must match in pk class. must have @idclass annotation on class. ex:

public class emppk { int id; string name; ... }  @entity @idclass(emppk.class) public class employee { @id int id; @id string name;  ... } 

b) embed attribute of pk class in entity. in case attribute marked @embeddedid , pk class must annotated @embeddable. ex:

@embeddable public class emppk { int id; string name; ... }  @entity public class employee { @embeddedid emppk empid; ... } 

Comments

Popular posts from this blog

How to remove text and logo OR add Overflow on Android ActionBar using AppCompat on API 8? -

html - How to style widget with post count different than without post count -

url rewriting - How to redirect a http POST with urlrewritefilter -