为什么ormlite不能通过jpa Table注释获得正确的表名?

时间:2014-05-09 15:04:36

标签: java ormlite

以下是我得到的内容。Table注释将表格名称设置为cbhistory_article,但是ormlite的TableInfo表格名称为article

enter image description here

我怎样才能做正确的事?

com.j256.ormlite.table.DatabaseTableConfig#extractTableName中会发现,com.j256.ormlite.misc.JavaxPersistence#getEntityName只获取实体名称而不是表名。但为什么呢?

根据this,我认为考虑使用Table名称更好或同时使用TableEntity名称。

2 个答案:

答案 0 :(得分:1)

  

@Table注释将表名设置为cbhistory_article,但是ormlite的TableInfo获取的表名是文章。

您没有提供用于定义实体的代码,但我认为它类似于:

@Entity
@Table(name = "cbhistory_article")
public class Article {
   ...

很遗憾,此时ORMLite不支持@Table注释。我已将此代码添加到trunk,它将在4.49版本中。对不起,对不起。现在它只监听name字段。您是否需要更多支持其他领域?

要使其发挥作用,请使用name注释上的@Entity字段:

@Entity(name = "cbhistory_article")
public class Article {
   ...

答案 1 :(得分:0)

这是我的解决方法。

@Inject
private void initDao(DataSource dataSource, @Named("jdbc.url") String url) throws SQLException
{
    setConnectionSource(new DataSourceConnectionSource(dataSource, url));

    DatabaseTableConfig<T> config = DatabaseTableConfig.fromClass(getConnectionSource(), dataClass);
    config.setTableName(getTableName());
    setTableConfig(config);

    initialize();
}

private String getTableName()
{
    Table table = dataClass.getAnnotation(Table.class);
    if (table == null || Strings.isNullOrEmpty(table.name()))
        return DatabaseTableConfig.extractTableName(dataClass);

    return table.name();
}