【问题标题】:How to automatically create an entity from database tables?如何从数据库表中自动创建实体?
【发布时间】:2014-09-19 07:46:21
【问题描述】:

我正在使用spring-batch 从数据库中获取一些数据。 如果我使用SELECT * FROM...,我的结果集是@Entity 类的列表,这是所需的。

但我只想获取实体的一些属性(列):

SELECT DISTINCT ON (a, b) a, c, d
FROM mytable [...]

因此,我相应地创建了一个与获取的列匹配的构造函数:

@Entity
public class MyEntity {
    private int id;

    public MyEntity(String a, BigDecimal c, Date d) {
        //setter
    }
}

结果:

org.hibernate.engine.jdbc.spi.SqlExceptionHelper
PSQLException: The column id was not found in ResultSet

这是我的读者定义:

JpaPagingItemReader<MyEntity> reader = new JpaPagingItemReader<MyEntity>();
JpaNativeQueryProvider<MyEntity> queryProvider = new JpaNativeQueryProvider<>();
queryProvider.setSqlQuery(SQL);
reader.setQueryProvider(queryProvider);

如果我不获取整行内容,如何让自动创建实体?

【问题讨论】:

    标签: java database spring jdbc spring-batch


    【解决方案1】:

    您可以将 JPA 查询用作

    select new bar.foo.entity.custom.CustomEntity (u.id, u.username, u.firstName, u.surname, u.email) from UserAccount u order by u.username ASC
    

    请注意 new 关键字和 pojo 声明。这就是魔法发生的地方。

    【讨论】:

    • 这里的e.* 是什么?我必须将DISTINCT ON放在哪个位置?
    • 好吧,你的问题是如何获取一些属性,所以没有 e.*。 RE 不同的,您可以用作 DISTINCT(e.username)。
    • 我的意思是:您的示例查询中的e 代表什么?因为它没有在任何地方定义......我应该写SELECT NEW bar..CustomEntity(..) DISTINCT ON(..) FROM ..还是SELECT DISTINCT ON(..) NEW bar..CustomEntity(..) FROM ..
    • 不同的是,我需要运行代码并尝试。对不起。我从头顶写了。
    • 嗯我试过了(没有不同的),但不断得到:ERROR: Syntaxerror on ?.?
    猜你喜欢
    • 2011-01-22
    • 1970-01-01
    • 2014-12-30
    • 1970-01-01
    • 2016-08-04
    • 2017-07-31
    • 2010-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多