java - Insert Data only once after Hibernate started -
i'm using hibernate 4.1.2
and want insert data table.
i know can realized sql in hibernate configuration in way:
<property name="hibernate.hbm2ddl.import_files" value="/file1.sql,/file2.sql"/>
.
but, there other ways insert automatically data once in java code after hibernate started?
i want this:
public role getrolebyname(enumrole name) { return (role) sessionfactory.getcurrentsession() .createquery("from role name = :name") .setparameter("name", name).uniqueresult(); } public void insertroles(){ for(enumrole role:enumrole.values()) { role r=getrolebyname(role); if(r==null) { r=new role(); r.setname(role); r.setdescription(role.getdescription()); sessionfactory.getcurrentsession().save(r); } }
enumrole:
public enum enumrole { role_client("РОЛЬ КЛИЕНТА"), role_admin("РОЛЬ АДМИНСТРАТОРА"), role_consumer("РОЛЬ КОМПАНЬОНА"), role_anonymous("НЕ АВТОРИЗОВАННЫЙ ПОЛЗОВАТЕЛЬ"); enumrole(string descriptin) { this.descriptin=descriptin; } public string getdescription() { return this.descriptin; } private string descriptin; }
you need create spring bean @postconstruct
annotated method , example create transaction using platformtransactionmanager
:
@service public class anybean { @autowired private platformtransactionmanager transactionmanager; @autowired private sessionfactory sessionfactory; @postconstruct private void init() { transactiontemplate transactiontemplate = new transactiontemplate(transactionmanager); transactiontemplate.execute(new transactioncallback<object>() { @override public object dointransaction(transactionstatus transactionstatus) { // here code for(enumrole role:enumrole.values()) { role r = getrolebyname(role); if(r==null) { r=new role(); r.setname(role); r.setdescription(role.getdescription()); sessionfactory.getcurrentsession().save(r); } } return null; } }); } }
i hope helped.
Comments
Post a Comment