如何从数据库表中自动创建实体?

时间:2014-09-19 07:46:22

标签: java database spring jdbc spring-batch

我正在使用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);

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

1 个答案:

答案 0 :(得分:0)

您可以将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

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