Java 在Hibernate中param有什么用途<;发电机>;标签?

Java 在Hibernate中param有什么用途<;发电机>;标签?,java,hibernate,Java,Hibernate,我是Hibernate新手,在我当前的项目Hibernate配置文件中,我发现了如下代码: <id name="id" column="ANNOBATCHJOBLOGID"> <generator class="sg.gov.frontier.core.techinfra.persistence.dao.SequenceGeneratorYYYYMMDD"> <param name="sequence">ANNO_BATCH_JOB_L

我是Hibernate新手,在我当前的项目Hibernate配置文件中,我发现了如下代码:

<id name="id" column="ANNOBATCHJOBLOGID">
    <generator class="sg.gov.frontier.core.techinfra.persistence.dao.SequenceGeneratorYYYYMMDD">
        <param name="sequence">ANNO_BATCH_JOB_LOG_SEQ</param>
    </generator>
</id>

ANNO_批处理_作业_日志_SEQ
只是对param标签感到困惑,有人能告诉我它有什么用吗?还有“批处理作业日志”。非常感谢

SequenceGeneratorYYYYMMDD类位于此处:

public class SequenceGeneratorYYYYMMDD extends SequenceGenerator {
    protected Logger logger = Logger.getLogger(SequenceGeneratorYYYYMMDD.class);
    public String sequenceName;
    public String parameters;

    public static final long SEQUENCE_MIN_NUMBER = 1;
    public static final long SEQUENCE_MAX_NUMBER = 999999;
    public static final long SEQUENCE_INCREMENT_NUMBER = 1;
    public static final long SEQUENCE_START_NUMBER = 1;

    public SequenceGeneratorYYYYMMDD() {
        super();
    }

    public long getNextSequenceForSequenceName(String strSequenceName)
            throws DataAccessObjectException {
        final SequenceDao sequenceDao = new SequenceDao();

        Long sequence = sequenceDao.getNextKey(strSequenceName);

        return sequence;
    }

    public void configure(Type type, Properties params, Dialect dialect)
            throws MappingException {
        this.sequenceName = getString(SEQUENCE, params, "hibernate_sequence");
        this.parameters = params.getProperty(PARAMETERS);
        String schemaName = params.getProperty(SCHEMA);
        String catalogName = params.getProperty(CATALOG);

        if (sequenceName.indexOf('.') < 0) {
            sequenceName = Table.qualify(catalogName, schemaName, sequenceName);
        }

    }

    public String getString(String property, Properties properties,
            String defaultValue) {
        String propValue = properties.getProperty(property);
        return propValue == null ? defaultValue : propValue;
    }

    public Serializable generate(SessionImplementor session, Object obj)
            throws HibernateException {

        String result = DateUtil.convertDateToDateString(new DateTime(),
                "yyMMddHH");

        try {
            result = result
                    + StringUtil
                            .leftPad(
                                    String.valueOf(getNextSequenceForSequenceName(sequenceName)),
                                    '0', 8);
        } catch (DataAccessObjectException e) {
            throw new HibernateException(e.getMessage(), e.getCause());
        }

        logger.debug("Generated sequence no. " + result);
        return new Long(result);

    }
}
公共类SequenceGeneratoryyymmdd扩展SequenceGenerator{
受保护的记录器=Logger.getLogger(SequenceGeneratorYYYYMMDD.class);
公共字符串序列名;
公共字符串参数;
公共静态最终长序列\最小\编号=1;
公共静态最终长序列\最大\编号=999999;
公共静态最终长序列\增量\编号=1;
公共静态最终长序列\u开始\u编号=1;
公共序列生成器yyymmdd(){
超级();
}
公共长getNextSequenceForSequenceName(字符串strSequenceName)
抛出DataAccessObjectException{
final SequenceDao SequenceDao=新SequenceDao();
长序列=sequenceDao.getNextKey(strSequenceName);
返回序列;
}
公共void配置(类型、属性参数、方言)
抛出映射异常{
this.sequenceName=getString(序列,参数,“hibernate_序列”);
this.parameters=params.getProperty(参数);
字符串schemaName=params.getProperty(SCHEMA);
字符串catalogName=params.getProperty(目录);
if(sequenceName.indexOf('.')<0){
sequenceName=Table.qualify(catalogName、schemaName、sequenceName);
}
}
公共字符串getString(字符串属性、属性、,
字符串(默认值){
字符串propValue=properties.getProperty(property);
返回propValue==null?默认值:propValue;
}
公共可序列化生成(SessionImplementor会话,对象obj)
抛出冬眠异常{
字符串结果=DateUtil.convertDateToDateString(新的日期时间(),
“yyMMddHH”);
试一试{
结果=结果
+StringUtil
.leftPad(
String.valueOf(getNextSequenceForSequenceName(sequenceName)),
'0', 8);
}捕获(DataAccessObjectException){
抛出新的HibernateException(e.getMessage(),e.getCause());
}
logger.debug(“生成的序列号”+结果);
返回新长(结果);
}
}
我如何知道需要哪种方法来传递参数?虽然似乎是getNextSequenceForSequenceName()方法。

From

可选的
子元素命名一个Java类,用于为持久类的实例生成唯一标识符如果配置或初始化生成器实例需要任何参数,则使用
元素传递这些参数。


uid_表
下一个\u高\u值\u列

让我们看看你的
SequenceGeneratoryyymmdd
类。是的,看起来像一个序列,很抱歉,我很明显,但我发现一些很酷的东西是一些你可以控制的与此相关的注释。在hibernate中搜索序列以查找它们。我认为参数告诉程序ANNO_BATCH_JOB_LOG_SEQ是一个序列。将generator标记作为父项放置可能会告诉hibernate将该序列用于生成器。您认为它与某种日志记录相关吗?但是在我的生成器类中有多种方法。我怎么知道传递值需要哪种方法?
<id name="id" type="long" column="cat_id">
    <generator class="org.hibernate.id.TableHiLoGenerator">
            <param name="table">uid_table</param>
            <param name="column">next_hi_value_column</param>
    </generator>
</id>