相关疑难解决方法(0)

是否可以在Spring Repository中使用原始SQL

我需要在Spring Data Repository中使用原始SQL,这可能吗?我看到的一切@Query都是基于实体的.

java hibernate spring-data-jpa

95
推荐指数
5
解决办法
15万
查看次数

将NativeQuery结果映射到POJO

我试图使用带@ConstructorResult的@SqlResultSetMapping将Native查询的结果映射到POJO.这是我的代码:

@SqlResultSetMapping(name="foo",
    classes = {
        @ConstructorResult(
                targetClass = Bar.class,
                columns = {
                    @ColumnResult(name = "barId", type = Long.class),
                    @ColumnResult(name = "barName", type = String.class),
                    @ColumnResult(name = "barTotal", type = Long.class)
                })
    })

public class Bar {

private Long barId;
private String barName;
private Long barTotal;

...
Run Code Online (Sandbox Code Playgroud)

然后在我的DAO中:

Query query = em.createNativeQueryBar(QUERY, "foo");
... set some parameters ...
List<Bar> list = (List<Bar>) query.getResultList();
Run Code Online (Sandbox Code Playgroud)

我已经读过这个功能仅在JPA 2.1中受支持,但这正是我正在使用的.这是我的依赖:

        <dependency>
            <groupId>org.hibernate.javax.persistence</groupId>
            <artifactId>hibernate-jpa-2.1-api</artifactId>
            <version>1.0.0.Final</version>
        </dependency>
Run Code Online (Sandbox Code Playgroud)

我发现了一些资源,包括这一个:jpa 2.1中的@ConstructorResult映射.但我仍然没有运气.

我错过了什么?为什么不能找到SqlResultSetMapping?

javax.persistence.PersistenceException: org.hibernate.MappingException: Unknown SqlResultSetMapping [foo]
Run Code Online (Sandbox Code Playgroud)

java hibernate jpa pojo

34
推荐指数
5
解决办法
6万
查看次数

JPA Native Query选择和转换对象

我有一个Admin扩展的对象User.默认情况下,两个对象都在User_我的Derby数据库的表中(包含的字段Admin).通常我会选择User这样的:

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<User> query = cb.createQuery(User.class);
Root user= query.from(User.class);
Predicate predicateId = cb.equal(category.get("id"), id);
query.select(user).where(predicateId);
return em.createQuery(query).getSingleResult();
Run Code Online (Sandbox Code Playgroud)

但是由于我的查询的复杂性,我正在使用这样的本机查询:

Query query = em.createNativeQuery("SELECT USER.* FROM USER_ AS USER WHERE ID = ?");
query.setParameter(1, id);
return (User) query.getSingleResult();
Run Code Online (Sandbox Code Playgroud)

虽然这会抛出一个强制转换异常.我认为这是由于任何领域Admin.

我的问题是,如何选择User使用具有相同结果的本机查询作为第一个示例(包括与JPQL查询将返回的@LOB@ManyToOne(等等)相同的值)?

java sql jpa jpql

24
推荐指数
3
解决办法
11万
查看次数

JPA 2.0本机查询结果为map

我运行JPA 2.0本机查询,如下所示:

Query query = em.createNativeQuery("SELECT NAME, SURNAME, AGE FROM PERSON");
List list = query.getResultList();
Run Code Online (Sandbox Code Playgroud)

现在list拥有查询返回的所有行.我可以迭代它们,但每个条目都在Object[]哪里:

  • 在索引0我找到了NAME
  • 在索引1处,我找到了SURNAME
  • 在索引3我找到了AGE

有没有人找到办法做这样的事情:

Map<String, Object> row = list.get(index);
String name = row.get("NAME");
String surname = row.get("SURNAME");
Integer age = row.get("AGE");
Run Code Online (Sandbox Code Playgroud)

我需要这个,因为我执行的本机查询是动态的,我不知道SELECT子句中字段的顺序,所以我不知道id的查询将如下所示:

SELECT SURNAME, NAME, AGE FROM PERSON
Run Code Online (Sandbox Code Playgroud)

要么

SELECT AGE, NAME, SURNAME FROM PERSON
Run Code Online (Sandbox Code Playgroud)

甚至

SELECT AGE, SURNAME, NAME FROM PERSON
Run Code Online (Sandbox Code Playgroud)

jpa native

23
推荐指数
2
解决办法
5万
查看次数

获取错误无法在类上找到适当的构造函数

我试图将本机SQL结果映射到我的POJO.这是配置.我在用春天.

<bean id="ls360Emf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" >
    <property name="dataSource" ref="ls360DataSource" />
    <property name="jpaVendorAdapter" ref="vendorAdaptor" />         
    <property name="packagesToScan" value="abc.xyz"/>
    <property name="jpaProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
            <prop key="hibernate.max_fetch_depth">3</prop>
            <prop key="hibernate.jdbc.fetch_size">50</prop>
            <prop key="hibernate.jdbc.batch_size">10</prop>
            <prop key="hibernate.show_sql">true</prop>              
        </props>        
    </property>
</bean> 
Run Code Online (Sandbox Code Playgroud)

这是我的班级

@SqlResultSetMapping(
    name="courseCompletionMapping", 
    classes = {
        @ConstructorResult(targetClass = CourseCompletion.class,
            columns={
                @ColumnResult(name = "StoreId", type = String.class),
                @ColumnResult(name = "ProductId", type = String.class),
                @ColumnResult(name = "UserName", type = String.class),
                @ColumnResult(name = "Score", type = Integer.class),
                @ColumnResult(name = "CompletionDate", type = Date.class)
             }
        )
    }
) 
@Entity
public class CourseCompletion …
Run Code Online (Sandbox Code Playgroud)

spring-data-jpa hibernate-4.x jpa-2.1

21
推荐指数
1
解决办法
2万
查看次数

将 ResultSet 映射到 Pojo 对象

好吧,这真的很尴尬,我制作了一个标准的 pojo 类及其 dao 类用于数据检索目的。我很难理解如何处理 Pojo 类的自定义查询数据的基本过程。

假设我的用户类别是

public class User{

private int userId;
private String username;
private int addressId;

}

public class Address{
private int addressId;
private String zip;
}
public class UserDAO{

public void getUserDetails(){

String getSql = select u.userId, u.username, a.zipcode from user u, address a where u.addressId =     a.addressId;

 //no pojo class is now specific to the resultset returned. so we can't map result to pojo object
}

}
Run Code Online (Sandbox Code Playgroud)

现在我应该如何用我的 pojo 类对此进行建模,就好像使用 String 来管理它一样,那么面向对象的概念就会消失,并且将来的复杂性也会增加。请指导!

更新以获取进一步说明

我们知道我们可以将相同的表对象映射到相同的 …

java sql oop pojo

5
推荐指数
1
解决办法
3万
查看次数

当我的项目中没有任何实体时,如何将原生查询映射到POJO?

我正在将ETL过程从工具转换为Java批处理API应用程序.在这个ETL过程中.在当前版本(使用该工具)中,我们有许多连接不同表的SQL语句,以便生成所需的输出.现在可以转换为Java,JPA.

我想使用本机查询.这样会很好,因为它不需要为查询中使用的每个表创建实体,我可以使用POJO来查询结果(我也不需要重写查询).阅读这个答案,我知道我可以使用@SqlResultSetMapping.问题是我的项目中没有任何实体,所以我不知道在哪里放这个注释.我可以在任何地方放置这个注释,以便实体经理找到它吗?

PS:在我的概念证明中,我目前正手动从一组对象转换为POJO,但我真的不喜欢这种方法.

@Entity注释添加到POJO将导致我的应用程序无法启动:

引起:org.hibernate.HibernateException:缺少表:MyTable

我不确定(现在正在搜索它),但我认为它可能是由我的persistence.xml中的这个属性引起的

<property name="hibernate.hbm2ddl.auto" value="validate"/>
Run Code Online (Sandbox Code Playgroud)

java mysql hibernate jpa

5
推荐指数
2
解决办法
2万
查看次数

Hibernate @ColumnTransformer 的 Open JPA 等效项

我正在将 ORM 框架从 Hibernate 切换到 OpenJPA。

在 Hibernate 中,我们可以使用 @ColumnTransformer 注释字段,如下所示。

@Column(name = "EMP_NAME", length = 4000)
@ColumnTransformer(
        read = "pgp_pub_decrypt(emp_name::bytea,dearmor('"+key1+"'))",
        write = "pgp_pub_encrypt(?, dearmor('"+key2+"'))"
)
private String empName;
Run Code Online (Sandbox Code Playgroud)

如何在 OpenJPA 中执行相同操作

java postgresql hibernate jpa openjpa

5
推荐指数
1
解决办法
5255
查看次数

如何将连接查询映射到JPA中的非实体类?

在休眠

连接查询可以与非实体类映射.如何将数据库查询映射到Object [在Java中]?

<class name=... select="select A.field_a, B.field_b, ... from A, B, ...">
Run Code Online (Sandbox Code Playgroud)

如何在JPA/Hibernate中实现相同的功能?

java hibernate jpa

4
推荐指数
1
解决办法
1万
查看次数

春季 JPA。如何从 @Query(nativeQuery = true) 映射到 POJO

有疑问,就这样吧

select 1 "colName"
Run Code Online (Sandbox Code Playgroud)

我想使用 Spring Data JPA 将结果映射到 POJO 类型。

因此,图片是:

public interface MyAwesomeSuperInterface extends CrudRepository {
    @Query(value = "select 1 \"colName\"", nativeQuery = true)
    List<POJO> something();
}
Run Code Online (Sandbox Code Playgroud)

问题是如何将其映射到POJO.class

按照我认为我会得到的常见建议:

  1. 不,我不想将其更改为 JSQL 并执行“新 POJO”。
  2. 为什么?因为我有一个复杂的sql查询,它无法反映到JSQL中。
  3. 不,我不会提出疑问。我只想知道如何使用将上面的示例映射到 POJO Spring Data。谢谢

java spring spring-data-jpa

3
推荐指数
1
解决办法
1万
查看次数