【问题标题】:what is the use of param in Hibernate <generator> tag?Hibernate <generator> 标签中的 param 有什么用?
【发布时间】:2014-01-27 10:44:53
【问题描述】:

我是 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>

只是对param标签感到困惑,有人能告诉我它有什么用吗?还有“ANNO_BATCH_JOB_LOG_SEQ”。非常感谢

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);

    }
}

我怎么知道我需要哪种方法来传递参数?虽然似乎是 getNextSequenceForSequenceName() 方法。

【问题讨论】:

  • 让我们看看你的SequenceGeneratorYYYYMMDD 课程。
  • 是的,看起来像一个序列,抱歉我很明显,但我发现一些很酷的东西是您可以控制与此相关的一些注释。在休眠状态下谷歌序列以找到它们。我认为参数告诉程序 ANNO_BATCH_JOB_LOG_SEQ 是一个序列。与生成器标签一起放置作为父级可能会告诉 hibernate 将该序列与生成器一起使用。你认为它与某种记录有关吗?

标签: java hibernate


【解决方案1】:

来自Hibernate docs 5.1.4.1. Generator

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

<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>

【讨论】:

  • 但我的生成器类中有多种方法。我怎么知道我需要哪种方法来传递值?
猜你喜欢
  • 2011-03-19
  • 1970-01-01
  • 1970-01-01
  • 2011-11-04
  • 1970-01-01
  • 2022-08-11
  • 2010-09-27
  • 2014-03-16
  • 1970-01-01
相关资源
最近更新 更多