【问题标题】:How to use JPA to select native table columns?如何使用 JPA 选择原生表列?
【发布时间】:2020-03-11 10:30:10
【问题描述】:

我想使用 JPA 从表中选择几列。 在这种情况下,我对完整的实体不感兴趣,而只是对具有某些 Id 的几列感兴趣。

所以这是我的方法:

EntityManager em = createEntityManager();
List<Object[]> data = em.createNativeQuery( "SELECT ID, FOREIGN_OBJ_1_ID, FOREIGN_OBJ_2_ID FROM TABLE1" ).getResultList();
em.close();

for ( Object[] row : rentaldata )
{
     Long id = ( (BigDecimal) row[0] ).longValue();
     Long fk_1 = ((Long) row[1]);
     Long fk_2 = ((Long) row[2]);

      DataObject do = new DataObject(id, fk_1, fk_2, ...);
...

我也尝试使用 JPA select new .... 但我想确保没有创建任何对象。 所以我的问题是:有没有更好的方法来加载几列并将它们放入一个对象中?

谢谢, 托尔斯滕

【问题讨论】:

    标签: java sql jpa


    【解决方案1】:

    您可以使用SqlResultMapping。试试这样的:

     Query q = em.createNativeQuery(
            "SELECT o.id AS order_id, " +
                "o.quantity AS order_quantity, " +
                "o.item AS order_item, " +
                "i.name AS item_name, " +
            "FROM Order o, Item i " +
            "WHERE (order_quantity > 25) AND (order_item = i.id)",
        "OrderResults");
    
        @SqlResultSetMapping(name="OrderResults", 
            entities={ 
                @EntityResult(entityClass=com.acme.Order.class, fields={
                    @FieldResult(name="id", column="order_id"),
                    @FieldResult(name="quantity", column="order_quantity"), 
                    @FieldResult(name="item", column="order_item")})},
            columns={
                @ColumnResult(name="item_name")}
        )
    

    更多详情herehere

    【讨论】:

      猜你喜欢
      • 2011-09-05
      • 1970-01-01
      • 1970-01-01
      • 2018-11-13
      • 2012-04-19
      • 2015-05-08
      • 2012-04-22
      • 2020-01-14
      • 1970-01-01
      相关资源
      最近更新 更多