简体   繁体   English

如何使用 JPA 选择本机表列?

[英]How to use JPA to select native table columns?

I want to select a few column from a table using JPA.我想使用 JPA 从表中选择几列。 In this case I am not interessted in complete Entities, but just in a few columns with certain Ids.在这种情况下,我对完整的实体不感兴趣,而只是对具有某些 Id 的几列感兴趣。

So this is my approach:所以这是我的方法:

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

I tried also with JPA select new .... but I want be be sure no Objects are created.我也尝试过使用 JPA select new .... 但我想确保没有创建对象。 So my question is: Is there any better approach to load several columns and put them into an object that this ?所以我的问题是:有没有更好的方法来加载多列并将它们放入一个对象中?

thanks, Thorsten谢谢,托尔斯滕

You can use SqlResultMapping .您可以使用SqlResultMapping Try something like this:尝试这样的事情:

 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")}
    )

More details here and here更多细节在这里这里

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM