^1640682668687
@
sname
HibernateDataObject
slabel
HibernateDataObject
sdescriptors
xworker.lang.MetaDescriptor3
sextends
xworker.dataObject.DataObject
smany
true
seditCols
2
sinitialization
false
smodifier
public
sinheritDescription
false
Sdescription
#$@text#$@
<p>使用Hibernate存储数据的数据对象。</p>
<p>数据对象的名称为Hibernate的实体名称。</p>
#$@text#$@
  @/@actions
  sname
  actions
  slabel
  actions
  sdescriptors
  xworker.lang.MetaDescriptor3/@actions
  sid
  actions
    @/@actions/@create
    sname
    doCreate
    slabel
    doCreate
    sisSynchronized
    false
    sthrowException
    true
    suseOtherAction
    false
    svarScope
    Global
    sdisableGlobalContext
    false
    Scode
#$@text#$@
import xworker.dataObject.utils.DbUtil;
import xworker.util.UtilHibernate;

import ognl.Ognl;

//是否需要自动初始化
if(self.getBoolean("autoInit")){
    theData.doAction(self.autoInitAction, actionContext);
}

if(self.cls != null && self.cls != ""){
    //如果是持久化类
    def cls = Class.forName(cls);
    def obj = cls.newInstance();
    
    //赋值
    for(attr in self.get("attribute@")){
        if(attr.getBoolean("dataField")){
            def v = Ognl.getValue(attr.name, theData);
            if(v != null){
                Ognl.setValue(attr.name, obj, v);
            }
        }
    }
    
    id = session.save(obj);
    def keyDatas = theData.getKeyAndDatas();
    theData.put(keyDatas[0][0].name, id);

    return theData;
}else{
    //dynamic-map
    log.info(self.name);
    def id = UtilHibernate.save(session, (String) self.name, theData);
    
    def keyDatas = theData.getKeyAndDatas();
    theData.put(keyDatas[0][0].name, id);
    return theData;
}
#$@text#$@
    sinterpretationType
    Action
    ssaveReturn
    false
    sdescriptors
    xworker.lang.actions.Actions/@GroovyAction
    sid
    create
      @/@actions/@create/@contexts
      sname
      contexts
      slabel
      contexts
      sdescriptors
      xworker.lang.actions.Inout/@contexts
      sid
      contexts
        @/@actions/@create/@contexts/@session
        sname
        session
        sconfigName
        self.hibernateCfg
        sisNeedTransaction
        true
        slabel
        session
        sdisable
        false
        sonError
        ignore
        spreventError
        false
        sinherit
        true
        sdescriptors
        xworker.lang.context.Contexts/@HibernateContext
        sid
        session
    @/@actions/@update
    sname
    doUpdate
    slabel
    doUpdate
    sisSynchronized
    false
    sthrowException
    true
    suseOtherAction
    false
    svarScope
    Global
    sdisableGlobalContext
    false
    Scode
#$@text#$@
import xworker.dataObject.utils.DbUtil;
import xworker.util.UtilHibernate;

import ognl.Ognl;

def obj = theData.get("_hibernateObj");
if(obj == null){
    //先装载
    //键值
    def keyDatas = theData.getKeyAndDatas();
    if(keyDatas == null || keyDatas.length == 0){
        log.warn("no keys data cannot update, dataObjectPath=" + theData.getMetadata().getDescriptor().metadata.path);
        return null;
    }
    
    //只支持一个主键
    if(self.cls != null && self.cls != ""){
        def cls = Class.forName(self.cls);
        obj = session.load(cls, keyDatas[0][1]);        
    }else{
        obj = UtilHibernate.load(session, (String) self.name, keyDatas[0][1]);        
    }
    
    theData.setData("_hibernateObj", obj);
}

if(obj != null){
    //赋值
    for(attr in self.get("attribute@")){
        if(attr.getBoolean("dataField")){
            def v = Ognl.getValue(attr.name, theData);
            //log.info(attr.name + "=" + v);
            if(v != null){
                Ognl.setValue(attr.name, obj, v);
            }
        }
    }
    
    //log.info("update");    
    if(self.cls != null && self.cls != ""){
        session.update(obj);
    }else{
        UtilHibernate.update(session, self.name, obj);
    }
    
    session.flush();
    return obj;
}else{
    return null;
}
#$@text#$@
    sinterpretationType
    Action
    ssaveReturn
    false
    sdescriptors
    xworker.lang.actions.Actions/@GroovyAction
    sid
    update
      @/@actions/@update/@contexts
      sname
      contexts
      slabel
      contexts
      sdescriptors
      xworker.lang.actions.Inout/@contexts
      sid
      contexts
        @/@actions/@update/@contexts/@session
        sname
        session
        sconfigName
        self.hibernateCfg
        sisNeedTransaction
        true
        slabel
        session
        sdisable
        false
        sonError
        ignore
        spreventError
        false
        sinherit
        true
        sdescriptors
        xworker.lang.context.Contexts/@HibernateContext
        sid
        session
    @/@actions/@updateBatch
    sname
    updateBatch
    sisSynchronized
    false
    sthrowException
    true
    suseOtherAction
    false
    svarScope
    Global
    sdisableGlobalContext
    false
    Scode
#$@text#$@
import xworker.dataObject.utils.DbUtil;

//键值
def keyDatas = theData.getKeyAndDatas();
if(keyDatas == null || keyDatas.length == 0){
    log.warn("no keys data cannot update, dataObjectPath=" + theData.getMetadata().getDescriptor().metadata.path);
    return 0;
}

//生成insert sql语句
def sql = "update " + self.name + " set ";
def dirtyFields = theData.getMetadata().getDirtyFields();
if(dirtyFields == null || dirtyFields.length == 0){    
    return 0;
}
for(int i=0; i<dirtyFields.length; i++){   
    def descriptor = theData.getMetadata().getDefinition(dirtyFields[i]); 
    sql = sql + descriptor.fieldName + "=?";    
    if(i < dirtyFields.length - 1){
        sql = sql + ",";
    }
}

def datas = actionContext.get("conditionData");
if(datas == null){
    datas = [:];
}
//log.info("" + datas);
def conditionConfig = actionContext.get("conditionConfig");
if(conditionConfig == null){
    conditionConfig = [:];
}
def cds = [];
def clause = DbUtil.getConditionSql(conditionConfig, actionContext, datas, cds);
//log.info("clause=" + clause);
if(clause != null && clause != ""){
    sql = sql + " where " + clause;
}
if(self.getBoolean("showSql")){
    log.info(sql);
}

//设置参数值
def query = session.createQuery(sql);
try{
    def index = 0;
    for(int i=0; i<dirtyFields.length; i++){  
        //log.info(dirtyFields[i] + "=" + theData.get(dirtyFields[i]));
        DbUtil.setParameter(query, i, dirtyFields[i], theData);
        index ++;
    }
    
    for(int i=0; i<cds.size(); i++){
        def c = cds.get(i);
        def thing = theData.getMetadata().getDefinition(c.name);        
        DbUtil.setParameterValue(query, index + i, thing.get("type"), c.value);
    }
    
    //执行sql
    return query.executeUpdate();
}finally{
}
#$@text#$@
    sdescription
    <p>批量更新，根据查询条件查找并更新符合条件的记录。</p>
    sdescriptors
    xworker.lang.actions.Actions/@GroovyAction
    sid
    updateBatch
      @/@actions/@updateBatch/@ins
      sisValidate
      false
      sname
      ins
      slabel
      ins
      sdescriptors
      xworker.lang.actions.Inout/@ins
      sid
      ins
        @/@actions/@updateBatch/@ins/@theData
        sname
        theData
        stypeCheck
        false
        soptional
        true
        scheck
        false
        scheckLevel
        exception
        sdescriptors
        xworker.lang.actions.Inout/@ins/@param
        sid
        theData
        @/@actions/@updateBatch/@ins/@conditionConfig
        sname
        conditionConfig
        stypeCheck
        false
        soptional
        true
        scheck
        false
        scheckLevel
        exception
        sdescriptors
        xworker.lang.actions.Inout/@ins/@param
        sid
        conditionConfig
        @/@actions/@updateBatch/@ins/@conditionData
        sname
        conditionData
        stypeCheck
        false
        soptional
        true
        scheck
        false
        scheckLevel
        exception
        sdescriptors
        xworker.lang.actions.Inout/@ins/@param
        sid
        conditionData
      @/@actions/@updateBatch/@contexts
      sname
      contexts
      slabel
      contexts
      sdescriptors
      xworker.lang.actions.Inout/@contexts
      sid
      contexts
        @/@actions/@updateBatch/@contexts/@session
        sname
        session
        sconfigName
        self.hibernateCfg
        sisNeedTransaction
        true
        slabel
        session
        sdisable
        false
        sonError
        ignore
        spreventError
        false
        sinherit
        true
        sdescriptors
        xworker.lang.context.Contexts/@HibernateContext
        sid
        session
    @/@actions/@delete
    sname
    doDelete
    slabel
    doDelete
    sisSynchronized
    false
    sthrowException
    true
    suseOtherAction
    false
    svarScope
    Global
    sdisableGlobalContext
    false
    Scode
#$@text#$@
import xworker.dataObject.utils.DbUtil;
import xworker.util.UtilHibernate;

import ognl.Ognl;

def obj = theData.get("_hibernateObj");
if(obj == null){
    //先装载
    //键值
    def keyDatas = theData.getKeyAndDatas();
    if(keyDatas == null || keyDatas.length == 0){
        log.warn("no keys data cannot update, dataObjectPath=" + theData.getMetadata().getDescriptor().metadata.path);
        return null;
    }
    
    //只支持一个主键
    if(self.cls != null && self.cls != ""){
        def cls = Class.forName(self.cls);
        obj = session.load(cls, keyDatas[0][1]);        
    }else{
        obj = session.load((String) self.name, keyDatas[0][1]);        
    }
    
    theData.setData("_hibernateObj", obj);
}

if(obj != null){
    if(self.cls != null && self.cls != ""){
        session.delete(obj);
    }else{
        UtilHibernate.delete(session, self.name, obj);
    }
    
    return obj;
}else{
    return null;
}
#$@text#$@
    sinterpretationType
    Action
    ssaveReturn
    false
    sdescriptors
    xworker.lang.actions.Actions/@GroovyAction
    sid
    delete
      @/@actions/@delete/@contexts
      sname
      contexts
      slabel
      contexts
      sdescriptors
      xworker.lang.actions.Inout/@contexts
      sid
      contexts
        @/@actions/@delete/@contexts/@session
        sname
        session
        sconfigName
        self.hibernateCfg
        sisNeedTransaction
        true
        slabel
        session
        sdisable
        false
        sonError
        ignore
        spreventError
        false
        sinherit
        true
        sdescriptors
        xworker.lang.context.Contexts/@HibernateContext
        sid
        session
    @/@actions/@deleteBatch
    sname
    deleteBatch
    sisSynchronized
    false
    sthrowException
    true
    suseOtherAction
    false
    svarScope
    Global
    sdisableGlobalContext
    false
    Scode
#$@text#$@
import xworker.dataObject.utils.DbUtil;
import xworker.dataObject.DataObject;

def theData = actionContext.get("theData");
if(theData == null){
    theData = new DataObject(self);
}

//生成insert sql语句
def sql = "delete " + self.name;

def datas = actionContext.get("conditionData");
if(datas == null){
    datas = [:];
}
//log.info("" + datas);
def conditionConfig = actionContext.get("conditionConfig");
if(conditionConfig == null){
    conditionConfig = [:];
}
def cds = [];
def clause = DbUtil.getConditionSql(conditionConfig, actionContext, datas, cds);
//log.info("clause=" + clause);
if(clause != null && clause != ""){
    sql = sql + " where " + clause;
}
if(self.getBoolean("showSql")){
    log.info(sql);
}

def theData = new DataObject(self);

//设置参数值
def query = session.createQuery(sql);
try{
    def index = 0;
    
    for(int i=0; i<cds.size(); i++){
        def c = cds.get(i);
        def thing = theData.getMetadata().getDefinition(c.name);        
        DbUtil.setParameterValue(query, index + i, thing.get("type"), c.value);
    }
    
    //执行sql
    return query.executeUpdate();
}finally{
}
#$@text#$@
    sdescription
    <p>批量删除，根据查询条件查找并删除符合条件的记录。</p>
    sdescriptors
    xworker.lang.actions.Actions/@GroovyAction
    sid
    deleteBatch
      @/@actions/@deleteBatch/@ins
      sisValidate
      false
      sname
      ins
      slabel
      ins
      sdescriptors
      xworker.lang.actions.Inout/@ins
      sid
      ins
        @/@actions/@deleteBatch/@ins/@conditionConfig
        sname
        conditionConfig
        stypeCheck
        false
        soptional
        true
        scheck
        false
        scheckLevel
        exception
        sdescriptors
        xworker.lang.actions.Inout/@ins/@param
        sid
        conditionConfig
        @/@actions/@deleteBatch/@ins/@conditionData
        sname
        conditionData
        stypeCheck
        false
        soptional
        true
        scheck
        false
        scheckLevel
        exception
        sdescriptors
        xworker.lang.actions.Inout/@ins/@param
        sid
        conditionData
      @/@actions/@deleteBatch/@contexts
      sname
      contexts
      slabel
      contexts
      sdescriptors
      xworker.lang.actions.Inout/@contexts
      sid
      contexts
        @/@actions/@deleteBatch/@contexts/@session
        sname
        session
        sconfigName
        self.hibernateCfg
        sisNeedTransaction
        true
        slabel
        session
        sdisable
        false
        sonError
        ignore
        spreventError
        false
        sinherit
        true
        sdescriptors
        xworker.lang.context.Contexts/@HibernateContext
        sid
        session
    @/@actions/@load
    sname
    doLoad
    slabel
    doLoad
    sisSynchronized
    false
    sthrowException
    true
    suseOtherAction
    false
    svarScope
    Global
    sdisableGlobalContext
    false
    Scode
#$@text#$@
import xworker.dataObject.DataObject;
import xworker.dataObject.DataObjectList;
import xworker.dataObject.utils.DbUtil;

import ognl.Ognl;

def keyDatas = theData.getKeyAndDatas();
if(keyDatas == null || keyDatas.length == 0){
    log.warn("no keys data cannot update, dataObjectPath=" + theData.getMetadata().getDescriptor().metadata.path);
    return null;
}

//只支持一个主键
if(self.cls != null && self.cls != ""){
    def cls = Class.forName(self.cls);
    obj = session.load(cls, keyDatas[0][1]);        
}else{
    obj = session.load((String) self.name, keyDatas[0][1]);        
}

for(attr in self.get("attribute@")){
    if(attr.getBoolean("dataField")){
        def v = Ognl.getValue(attr.name, obj);
        Ognl.setValue(attr.name, theData, v);
    }
}

theData.setData("_hibernateObj", obj);
return theData;
#$@text#$@
    sinterpretationType
    Action
    ssaveReturn
    false
    sdescriptors
    xworker.lang.actions.Actions/@GroovyAction
    sid
    load
      @/@actions/@load/@contexts
      sname
      contexts
      slabel
      contexts
      sdescriptors
      xworker.lang.actions.Inout/@contexts
      sid
      contexts
        @/@actions/@load/@contexts/@session
        sname
        session
        sconfigName
        self.hibernateCfg
        sisNeedTransaction
        true
        slabel
        session
        sdisable
        false
        sonError
        ignore
        spreventError
        false
        sinherit
        true
        sdescriptors
        xworker.lang.context.Contexts/@HibernateContext
        sid
        session
    @/@actions/@query
    sname
    doQuery
    sisSynchronized
    false
    sthrowException
    true
    suseOtherAction
    false
    svarScope
    Global
    sdisableGlobalContext
    false
    Scode
#$@text#$@
import xworker.dataObject.DataObject;
import xworker.dataObject.DataObjectList;
import xworker.dataObject.utils.DbUtil;

import ognl.Ognl;

//生成查询sql语句
def theData = actionContext.get("theData");
if(theData == null){
    theData = new DataObject(self);
}
def datas = actionContext.get("conditionData");
if(datas == null){
    datas = [:];
}
//log.info("" + datas);
def conditionConfig = actionContext.get("conditionConfig");
if(conditionConfig == null){
    conditionConfig = [:];
}
//log.info("" + conditionConfig);
def pageInfo = actionContext.get("pageInfo");
def countSql = "";
def shouldCount = false;
if(pageInfo != null && pageInfo.limit != 0){
    shouldCount = true;
}

def attributes = theData.getMetadata().getAttributes();
def sql = "";
def tableName = self.name;
sql = sql + " from " + tableName;
countSql = "select count(*) from " + tableName;
def cds = [];
def clause = DbUtil.getConditionSql(conditionConfig, actionContext, datas, cds);
//log.info("clause=" + clause);
if(clause != null && clause != ""){
    sql = sql + " where " + clause;
    countSql = countSql + " where " + clause;
}
if(self.getBoolean("showSql")){
    log.info(sql);
}

if(pageInfo != null && pageInfo.sort != null && pageInfo.sort != "" && pageInfo.sort != "_extend"){
    sql = sql + " order by " + pageInfo.sort;
    if(pageInfo.dir != null && pageInfo.dir != ""){
        sql = sql + " " + pageInfo.dir;
    }
    //log.info(pageInfo.dir);
}else{
    def storeSortField = theData.getMetadata().descriptor.getString("storeSortField");
    if(storeSortField != null && storeSortField != "" && storeSortField != "_extend"){
        sql = sql + " order by " + storeSortField + " " + descriptor.getString("storeSortDir");
    }
}

//查询记录总数
if(shouldCount){
    def query = session.createQuery(countSql);
    def index = 0;
    for(int i=0; i<cds.size(); i++){
        def c = cds.get(i);
        def thing = theData.getMetadata().getDefinition(c.name);        
        DbUtil.setParameterValue(query, index + i, thing.get("type"), c.value);
    }
    pageInfo.totalCount = query.iterate().next().intValue();
}

//设置参数值和查询
def query = session.createQuery(sql);
try{
    def index = 0;
    for(int i=0; i<cds.size(); i++){
        //log.info(keyDatas[i][0].get("name") + "=" + keyDatas[i][1]);
        def c = cds.get(i);
        //log.info(c.name + ",operator=" + c.type + ",value=" + c.value);
        def thing = theData.getMetadata().getDefinition(c.name);        
        DbUtil.setParameterValue(query, index + i, thing.get("type"), c.value);
    }
    
    if(pageInfo != null && pageInfo.limit != 0){
        def start = pageInfo.start;
        query.setFirstResult(start);
        query.setMaxResults(pageInfo.limit);
    }
    
    //执行sql
    def listDatas = query.list();
    def ds =[];
    for(d in listDatas){    
        //构造对象
        def data = new DataObject(theData.getMetadata().getDescriptor());
        data.setInited(false);
        
        //设置属性值
        for(int i=0; i<attributes.size(); i++){
            def attr = attributes[i];
            if(attr.getBoolean("dataField")){
                //log.info("attrName=" + attr.get("name") + ",obj=" + d);
                data.put(attr.get("name"), Ognl.getValue(attr.get("name"), d));
            }
        }
        data.setData("_hibernateObj", d);
        data.setInited(true);
        
        //初始化多个属性列表
        def things = data.getMetadata().getThings();
        for(int i=0; i<things.size(); i++){
            def refThing = things[i];
            if(things[i].getBoolean("many")){
                def list = new DataObjectList(refThing, data);
                list.setInited(false);
                data.put(refThing.name, list);
            }else{
                def dchild = new DataObject(refThing.dataObjectPath);
                dchild.put(refThing.refAttributeName, data.get(refThing.localAttributeName));
                dchild.setInited(false);
                data.put(refThing.name, dchild);
            }
        }         
        
        ds.add(data);    
    }
    
    if(pageInfo != null){
        pageInfo.datas = ds;
    }
    
    return ds;
}finally{    
}
#$@text#$@
    sinterpretationType
    Action
    ssaveReturn
    false
    sdescriptors
    xworker.lang.actions.Actions/@GroovyAction
    sid
    query
      @/@actions/@query/@contexts
      sname
      contexts
      slabel
      contexts
      sdescriptors
      xworker.lang.actions.Inout/@contexts
      sid
      contexts
        @/@actions/@query/@contexts/@session
        sname
        session
        sconfigName
        self.hibernateCfg
        sisNeedTransaction
        true
        slabel
        session
        sdisable
        false
        sonError
        ignore
        spreventError
        false
        sinherit
        true
        sdescriptors
        xworker.lang.context.Contexts/@HibernateContext
        sid
        session
      @/@actions/@query/@ins
      sisValidate
      false
      sname
      ins
      slabel
      ins
      sdescriptors
      xworker.lang.actions.Inout/@ins
      sid
      ins
        @/@actions/@query/@ins/@datas
        sname
        conditionData
        stypeCheck
        false
        soptional
        true
        scheck
        false
        scheckLevel
        exception
        sdescription
        <p>查询参数</p>
        sdescriptors
        xworker.lang.actions.Inout/@ins/@param
        sid
        datas
        @/@actions/@query/@ins/@condition
        sname
        condition
        stypeCheck
        false
        soptional
        true
        scheck
        false
        scheckLevel
        exception
        sdescription
        <p>查询条件定义</p>
        sdescriptors
        xworker.lang.actions.Inout/@ins/@param
        sid
        condition
    @/@actions/@generateId
    sname
    generateSeqId
    sisSynchronized
    false
    sthrowException
    true
    suseOtherAction
    false
    svarScope
    Global
    sdisableGlobalContext
    false
    Scode
#$@text#$@
def driverName = con.getMetaData().getDriverName();
if(driverName != null && driverName.indexOf("Oracle") != -1){
    //oracle数据库
    def sql = "select " + self.sequenceName + ".nextval as nextID from dual";
    def pst = con.prepareStatement(sql);
    def rs = null;
    try{
        rs = pst.executeQuery();
        if(rs.next()){
            return rs.getInt("nextID");
        }else{
            throw new Exception("cannot get seq from " + self.sequenceName);
        }
    }finally{
         if(rs != null){
             rs.close();
         }
         if(pst != null){
             pst.close();
         }
    }
}else{
    log.warn("database driver " + driverName + " not supported sequence");
    throw new Exception("database driver " + driverName + " not supported sequence");
}
#$@text#$@
    sdescriptors
    xworker.lang.actions.Actions/@GroovyAction
    sid
    generateId
    @/@actions/@menu_reverse
    sname
    menu_reverse
    sisSynchronized
    false
    sthrowException
    true
    suseOtherAction
    false
    svarScope
    Global
    sdisableGlobalContext
    false
    Scode
#$@text#$@
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.MessageBox;
import java.sql.Types;

def shell = event.widget.display.activeShell;
def self = currentThing;
def dataSource = world.getThing(self.dataSource);
if(dataSource == null){
    def box = new MessageBox(shell, SWT.NONE);
    box.setText("操作信息");
    box.setMessage("数据源不存在！");
    box.open();
    return;
}

if(self.tableName == null || self.tableName == ""){
    def box = new MessageBox(shell, SWT.NONE);
    box.setText("操作信息");
    box.setMessage("没有设置表名！");
    box.open();
    return;
}

def columnMThing = world.getThing("xworker.lang.db.jdbc.metadata.Columns");
def columns = columnMThing.doAction("query", actionContext, ["dataSource":dataSource, "tableNamePattern": self.tableName.toUpperCase()]);
for(column in columns){
    switch(column.dataType){
        case Types.ARRAY_LOCATOR:
            break;
        case Types.BIGINT:
            break;
        case Types.BINARY:
            break;
        case Types.BIT:
            break;
        case Types.BLOB_LOCATOR:
            break;
        case Types.CHAR:
            break;
        case Types.CLOB_LOCATOR:
            break;
        case Types.DATE:
            break;
        case Types.DECIMAL:
            break;
        case Types.DISTINCT:
            break;
        case Types.DOUBLE:
            break;
        case Types.FLOAT:
            break;
        case Types.INTEGER:
            break;
        case Types.JAVA_OBJECT:
            break;
        case Types.LONGVARBINARY:
            break;
        case Types.LONGVARCHAR:
            break;
        case Types.NULL:
            break;
        case Types.NUMERIC:
            break;
        case Types.OTHER:
            break;
        case Types.REAL:
            break;
        case Types.REF:
            break;
        case Types.SMALLINT:
            break;
        case Types.STRUCT:
            break;
        case Types.STRUCT_LOCATOR:
            break;
        case Types.TIME:
            break;
        case Types.TIMESTAMP:
            break;
        case Types.TINYINT:
            break;
        case Types.VARBINARY:
            break;
        case Types.VARCHAR:
            break;
    }
    println column.columnName;
}
#$@text#$@
    sdescriptors
    xworker.lang.actions.Actions/@GroovyAction
    sid
    menu_reverse
    @/@actions/@toHibernate
    sname
    toHibernate
    sisSynchronized
    false
    sthrowException
    true
    suseOtherAction
    false
    svarScope
    Global
    sdisableGlobalContext
    false
    Scode
#$@text#$@
import org.xmeta.Thing;

//Category
def thing = new Thing("xworker.hibernate.hibernate-mapping");

//Class-entity
def cls = new Thing("xworker.hibernate.hibernate-mapping/@class");
if(self.cls != null && self.cls != ""){
    cls.set("name", self.name);
}else{
    cls.set("entity-name", self.name);
}
cls.set("table", self.tableName);

//id
for(attr in self.get("attribute@")){
    if(attr.getBoolean("key")){
        def id = new Thing("xworker.hibernate.hibernate-mapping-nodes.class/@id");
        id.set("name", attr.name);
        id.set("column", attr.fieldName);
        id.set("type", attr.type);
        id.set("length", attr.length);
        cls.addChild(id);
    }
}

//attribute
for(attr in self.get("attribute@")){
    if(!attr.getBoolean("key")){
        def property = new Thing("xworker.hibernate.hibernate-mapping-nodes.class/@property");
        property.set("name", attr.name);
        property.set("column", attr.fieldName);
        property.set("type", attr.type);
        property.set("length", attr.length);
        cls.addChild(property);
    }
}    

thing.addChild(cls);
return thing;
#$@text#$@
    sdescriptors
    xworker.lang.actions.Actions/@GroovyAction
    sid
    toHibernate
  @/@tblName
  sname
  tblName
  slabel
  表名
  sinheritDescription
  false
  LvalidateOnBlur
  false
  LallowDecimals
  false
  LallowNegative
  false
  sdescriptors
  xworker.lang.MetaDescriptor3/@attribute
  sid
  tblName
  @/@hibernateCfg
  sname
  hibernateCfg
  slabel
  Hibernate配置
  sinheritDescription
  false
  sdescription
  <p>Hibernate配置的名称。</p>
  LvalidateOnBlur
  false
  LallowDecimals
  false
  LallowNegative
  false
  sdescriptors
  xworker.lang.MetaDescriptor3/@attribute
  sid
  hibernateCfg
  @/@cls
  sname
  cls
  slabel
  类名
  ssize
  60
  scolspan
  2
  sinheritDescription
  false
  Sdescription
#$@text#$@
<p>持久化类的全名，当创建数据对象时需要，目前只支持没有参数的默认构造器的类。</p>
<p>如果是dynamic-map此项为空。</p>
#$@text#$@
  LvalidateOnBlur
  false
  LallowDecimals
  false
  LallowNegative
  false
  sdescriptors
  xworker.lang.MetaDescriptor3/@attribute
  sid
  cls
  @/@attribute
  sname
  attribute
  slabel
  属性
  sdescriptors
  xworker.lang.MetaDescriptor3/@thing
  sextends
  xworker.dataObject.Attribute
  sid
  attribute
    @/@attribute/@fieldName
    sname
    fieldName
    slabel
    字段名
    sgroup
    DB
    sdescription
    <p>对应数据库中的字段名，如果没有那么数据库的字段名默认为属性名。</p>
    LvalidateOnBlur
    false
    LallowDecimals
    false
    LallowNegative
    false
    sdescriptors
    xworker.lang.MetaDescriptor3/@attribute
    sid
    fieldName
  @/@thing
  sname
  thing
  slabel
  事物
  sdescriptors
  xworker.lang.MetaDescriptor3/@thing
  sextends
  xworker.dataObject.RelationDataObject
  sid
  thing
  @/@actions1
  sname
  actions
  slabel
  Actions
  sdescriptors
  xworker.lang.MetaDescriptor2/@thing
  sextends
  xworker.lang.actions.Actions
  sid
  actions1
    @/@actions1/@name
    sname
    name
    sdescriptors
    xworker.lang.MetaDescriptor2/@attribute
    sid
    name
  @/@sswtMenus
  sname
  sswtMenus
  slabel
  sswtMenus
  sdescriptors
  xworker.lang.MetaDescriptor3/@swtMenus
  sid
  sswtMenus
    @/@sswtMenus/@menuDefine
    sname
    menuDefine
    slabel
    menuDefine
    sdescriptors
    xworker.lang.MetaDescriptor3/@swtMenus/@menuDefine
    sid
    menuDefine
      @/@sswtMenus/@menuDefine/@DbDataObject
      sname
      DataObject
      slabel
      DataObject
      sdescriptors
      xworker.lang.ThingMenu/@menuDefine/@menu
      sid
      DbDataObject
    @/@sswtMenus/@menuSetting
    sname
    menuSetting
    stype
    data
    smenuType
    DataObject
    slabel
    menuSetting
    sdescriptors
    xworker.lang.MetaDescriptor3/@swtMenus/@menuSetting
    sid
    menuSetting
      @/@sswtMenus/@menuSetting/@editData
      sname
      editData
      slabel
      编辑数据
      surl
      xworker.dataObject.DataObject/@actions/@menu_editData
      sisSplit
      false
      sattachParam
      true
      sdescriptors
      xworker.lang.ThingMenu/@menuSetting/@menu
      sid
      editData
