相关疑难解决方法(0)

JPA:如何将本机查询结果集转换为POJO类集合

我在我的项目中使用JPA.

我来到一个查询,我需要在五个表上进行连接操作.所以我创建了一个返回五个字段的本机查询.

现在我想将结果对象转换为包含相同五个字符串的java POJO类.

在JPA中是否有任何方法可以直接将该结果转换为POJO对象列表?

我来到以下解决方案..

@NamedNativeQueries({  
    @NamedNativeQuery(  
        name = "nativeSQL",  
        query = "SELECT * FROM Actors",  
        resultClass = db.Actor.class),  
    @NamedNativeQuery(  
        name = "nativeSQL2",  
        query = "SELECT COUNT(*) FROM Actors",  
        resultClass = XXXXX) // <--------------- problem  
})  
Run Code Online (Sandbox Code Playgroud)

现在在resultClass中,我们是否需要提供一个实际的JPA实体类?或者我们可以将它转换为包含相同列名的任何JAVA POJO类吗?

java jpa

156
推荐指数
7
解决办法
32万
查看次数

带有命名参数的本机查询失败,并且"未设置所有已命名的参数"

我想执行一个简单的本机查询,但它不起作用:

@Autowired
private EntityManager em;

Query q = em.createNativeQuery("SELECT count(*) FROM mytable where username = :username");
em.setProperty("username", "test");
(int) q.getSingleResult();
Run Code Online (Sandbox Code Playgroud)

为什么我得到这个例外?

org.hibernate.QueryException: Not all named parameters have been set: [username]
Run Code Online (Sandbox Code Playgroud)

java hibernate jpa

49
推荐指数
6
解决办法
10万
查看次数

使用entityManager.createNativeQuery(query,foo.class)

我想从a返回一个整数列表

javax.persistence.EntityManager.createNativeQuery 呼叫

为什么以下不正确?

entityManager.createNativeQuery("Select P.AppID From P", Integer.class);
Run Code Online (Sandbox Code Playgroud)

具体为什么我得到"......未知实体:java.lang.Integer"

我是否必须创建一个具有单个字段为Integer的实体类?

谢谢

java jpa ejb-3.0

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

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万
查看次数

使用Spring DATA JPA创建自定义查询?

我正在使用Spring Data JPA开展项目.我在数据库中有一个表作为my_query.

我想创建一个方法,该方法将字符串作为参数,然后在数据库中将其作为查询执行.

方法:

executeMyQuery(queryString)
Run Code Online (Sandbox Code Playgroud)

例如,当我通过

queryString= "SELECT * FROM my_query"
Run Code Online (Sandbox Code Playgroud)

那么它应该在DB级别运行该查询.

存储库类如下.

public interface MyQueryRepository extends JpaRepository<MyQuery, Long>{
    public MyQuery findById(long id);

    @Modifying(clearAutomatically = true)
    @Transactional
    @Query(value = "?1", nativeQuery = true)
    public void executeMyQuery(String query);

}
Run Code Online (Sandbox Code Playgroud)

但是,它没有像我预期的那样工作.它给出以下错误.

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''select * from my_query;'' at line 1
Run Code Online (Sandbox Code Playgroud)

还有其他办法,我可以实现这个目标.提前致谢

mysql sql spring spring-data spring-data-jpa

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

使用 JPA 存储库获取列的总和

我想使用 JPA 存储库实现执行以下查询。

询问:select sum(amount) from transactions where transaction_date_time between '2017-05-04 00:01:07' and '2017-05-04 23:03:07' and id=2;

为了找到我正在使用类似的东西:

public interface TransactionRepository extends JpaRepository<Transaction, Serializable>{
Transaction findById(Long id);
}
Run Code Online (Sandbox Code Playgroud)

所以总而言之,我需要这样的东西:

Double sumAmountByTransactionDateTimeBetweenAndMerchantId(Date from, Date to, Long merchantId);
Run Code Online (Sandbox Code Playgroud)

我不想使用@Query。我只想创建可以完成我的工作的方法名称。所以,这不是重复的。我尝试使用上面的函数名称,但它没有做我的工作。

java mysql hibernate jpa spring-boot

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

从Spring Data Jpa查询返回自定义对象

我在jpa信息库类中有一个自定义查询:

package it.univaq.we.internshipTutor.repository;
import ...

public interface ProfessorRepository extends JpaRepository<Professor, Long> {

    List<Professor> findAll();

    ...

    @Query(value =  "SELECT professor.id, professor.department_id, " +
                    "professor.first_name, professor.last_name, " +
                    "professor.email, COUNT(professor_id) as count " +
                    "FROM professor LEFT JOIN student_internship ON professor.id = professor_id " +
                    "GROUP BY professor_id ORDER BY count DESC LIMIT ?1", nativeQuery = true)
    List<ProfessorInternshipCount> mostRequestedProfessors(int limit);
}
Run Code Online (Sandbox Code Playgroud)

该查询返回最需要的10位实习导师/教授;结果由教授的信息和一个整数值(计数)组成。

教授模特班:

package it.univaq.we.internshipTutor.model;

import ...

@Entity
@Table(name = "professor")
public class Professor {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", …
Run Code Online (Sandbox Code Playgroud)

java spring spring-data spring-data-jpa spring-boot

6
推荐指数
1
解决办法
6454
查看次数

Spring数据:按嵌套属性排序

我使用JpaRepositoryJpaSpecificationExecutor从春季的数据,我有一个问题排序的方法findAll(specification, pageable, sort)

我想通过主repo类的嵌套属性对规范的结果进行排序.这是我的情况:

主要课程

class Foo {
    //other properties
    @OneToMany(mappedBy="foo")
    private Set<Bar> bars;
}
Run Code Online (Sandbox Code Playgroud)

订购类

class Bar {
    @ManyToOne
    @JoinColumn(name="fooId")
    private Foo foo;

    //I WANT TO SORT BY THIS FIELD
    @Column
    private Date date;
}
Run Code Online (Sandbox Code Playgroud)

这是我的回购

interface FooRepo extends JpaRepository<Foo , Long>, 
        JpaSpecificationExecutor<Foo>{
    //just jparepo methods
}
Run Code Online (Sandbox Code Playgroud)

这就是我正在尝试订购这个结果

void anymethod(){
    Sort sort = new Sort(Bar_.date.getName());
    PageRequest pr = new PageRequest(anyPage, anyMaxResultsNum, sort);
    repository.findAll(anySpecification, pr);

}
Run Code Online (Sandbox Code Playgroud)

当我运行这个我得到"PropertyReferenceException:找不到类型Foo的属性日期!"

我怎样才能做到这一点?

java spring spring-data

4
推荐指数
2
解决办法
4637
查看次数

createNativeQuery设置参数

我有以下包含NativeQuery的地方,我需要在其中设置参数,但由于未设置参数而使错误,因此查询为

SELECT movieId, title, genres FROM movies where title like '%%'"
Run Code Online (Sandbox Code Playgroud)

因此返回所有行。怎么了

public List<T> findMovie(String keyword) {
        Query q = getEntityManager().createNativeQuery("SELECT movieId, title, genres FROM movies where title like '%?%'", entityClass);
        q.setParameter(1, keyword); //etc
        return q.getResultList();
    }
Run Code Online (Sandbox Code Playgroud)

jpa parameter-passing nativequery

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