java - why i can't persist object by openjpa? - incorrect validation -
in web applicaton use openjpa on apache tomcat (tomee)/7.0.37 server. use netbeans auto generate class ("entity class database..." , "session beans entity class...").
my user.class:
@entity @table(name = "user") @xmlrootelement @namedqueries({ @namedquery(name = "user.findall", query = "select u user u"), @namedquery(name = "user.findbyiduser", query = "select u user u u.iduser = :iduser"), @namedquery(name = "user.findbylogin", query = "select u user u u.login = :login"), @namedquery(name = "user.findbypassword", query = "select u user u u.password = :password")}) public class user implements serializable { private static final long serialversionuid = 1l; @id @generatedvalue(strategy = generationtype.identity) @basic(optional = false) @notnull @column(name = "id_user") private short iduser; @size(max = 8) @column(name = "login") private string login; @size(max = 64) @column(name = "password") private string password; @jointable(name = "user_has_roles", joincolumns = { @joincolumn(name = "user_id", referencedcolumnname = "id_user")}, inversejoincolumns = { @joincolumn(name = "roles_id", referencedcolumnname = "id_roles")}) @manytomany private list<roles> roleslist; @onetomany(cascade = cascadetype.all, mappedby = "user") private list<lecturer> lecturerlist; @onetomany(cascade = cascadetype.all, mappedby = "user") private list<student> studentlist; //constructors, getters, setters }
when create new user managedbean:
private void adduser() { user user = new user(); user.setlogin(registerlog); user.setpassword(registerpass); roles r = new roles(); r.setidroles(new short("2")); list<roles> rolelist = new arraylist<roles>(); rolelist.add(r); user.setroleslist(rolelist); userfacade.create(user); //<------here create abstract facade em.persist(user); }
i exception:
javax.el.elexception: javax.ejb.ejbexception: bean encountered non-application exception; nested exception is: javax.validation.constraintviolationexception: validation constraint failure occurred class "model.entity.user". viewid=/pages/register.xhtml location=/home/jakub/projekty/collv2/build/web/pages/register.xhtml phaseid=invoke_application(5) caused by: javax.validation.constraintviolationexception - validation constraint failure occurred class "model.entity.user". @ org.apache.openjpa.persistence.validation.validatorimpl.validate(validatorimpl.java:282) /pages/register.xhtml @ line 26 , column 104 action="#{registercontroller.register}"
it's user id not correct. wrong ?
i think problem id generation type - generationtype.identity. when using identity special database column used generate id. id not generated until data inserted database , id not available entity until after commit. however, bean validation occurs on pre-persist callback using current state of entity. fail, because id still null
.
i change generation type.
Comments
Post a Comment