标签: jpql

不能在JPQL中按ORDER BY列

我试图通过JPQL查询声明中的字段进行排序,看起来它应该非常简单,但我不断收到编译器错误.

我正在尝试通过UserClockDate列进行排序,该列是UserTime行的一部分.但每次我尝试编译时都会收到错误:

严重:命名查询出错:fetchIfUserIsClockedInWithUser org.hibernate.QueryException:无法解析属性:UserClockDate of:models.UserTime [SELECT ut FROM models.UserTime ut WHERE USER_ID =:user ORDER BY ut.UserClockDate DESC]

如果我只是取出ORDER BY它编译好了.

这是班级本身的相关部分:

@NamedQueries({
        @NamedQuery(name = "fetchAllUserTimes", query = "SELECT ut FROM UserTime ut"),
        @NamedQuery(name = "fetchIfUserIsClockedInWithUser", query = "SELECT ut FROM UserTime ut WHERE USER_ID = :user ORDER BY ut.UserClockDate DESC") 
    })
@Entity
@Table(name = "userTime")
@Component
public class UserTime implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue
    @Column(name = "UserTimeId")
    private int userTimeId;

    @ManyToOne
    @JoinColumn(name = "USER_ID") …
Run Code Online (Sandbox Code Playgroud)

java jpa jpql

0
推荐指数
1
解决办法
464
查看次数

Hibernate初学者怀疑

嗨,我是hibernate的新手.我阅读了很多关于哪本书以及要阅读的规范的线程和讨论.但问题是有些线程太老了,我不明白从哪里开始.我从开发人员指南中的Hibernate规范开始,我认为这太复杂了.所以我读了一些小教程.实际上我被分配到一些项目,我被告知使用了Hibernate.但由于对Hibernate知之甚少,我完全迷失了.在代码中我可以看到在Maven pom中使用了Hibernate.我发现META-INF/Persistence.xml包含:

 <?xml version="1.0" encoding="UTF-8" ?> 
<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0">
 <persistence-unit name="EmployeeDatabase" transaction-type="JTA">
    <jta-data-source>java:EmpDS</jta-data-source>   
<provider>org.hibernate.ejb.HibernatePersistence</provider> 
<class>entity.Employee</class> 
<properties>
  <property name="hibernate.connection.password" value="Usha" /> 
  <property name="hibernate.archive.autodetection" value="class" /> 
  <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" /> 
  <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/Employee" /> 
  <property name="hibernate.connection.username" value="Usha" /> 
  <property name="hibernate.hbm2ddl.auto" value="update" /> 
  <property name="hibernate.show_sql" value="false" /> 
    </properties>
 </persistence-unit>
Run Code Online (Sandbox Code Playgroud)

我认为hibernate配置必须通过hibernate.cfg.xml来完成.但我可以在任何地方找到它.在执行查询时代码中没有对hibernate的引用.所有查询都是使用import javax.persistence.Query完成的.所以我猜JPQL用于执行查询.

所以我的问题是:这真的是Hibernate或JPA还是什么?

我什么时候可以说这是使用Hibernate进行持久化.

何时使用JPQL以及何时使用HQL?

请有人可以指导我完成这件事.要清楚我想首先学习Hibernate,然后深入挖掘我的作业.但我不知道从哪里开始.哪本书或教程最好.

最诚挚的问候,Jeena

java hibernate jpa hql jpql

0
推荐指数
1
解决办法
239
查看次数

两个联接的JPQL联合

我有两个相关的实体,用户和消息.消息有两个字段,包含用户实体,收件人和发件人.

我可以执行两个联接的联合,我将用户从Message的两个字段中获取到一个结果列表吗?

例如:

(select u from Message m join m.recipient) union (select u from Message m join m.sender)
Run Code Online (Sandbox Code Playgroud)

谢谢你的回答.

问候

Piotr Kozlowski

java postgresql hibernate jpa jpql

0
推荐指数
1
解决办法
1820
查看次数

这个JPQL有什么问题:'没有节点的数据类型'

我有以下查询

  @Query("Select cp from ChannelProgramme cp"
      + " where cp.programme.programmeId in (select programmeId from Programme programme"
      + " inner join programme.performers performer"
      + " where performer.performerId in :performerID)"
      + " AND (cp.progDate BETWEEN :fromDate AND :toDate)"
      + " ORDER BY cp.progDate, cp.startTime")
  List<ChannelProgramme> findScheduledPerformerProgrammes(@Param("performerID") Long performerId, @Param("fromDate") Date fromDate, @Param("toDate") Date toDate);
Run Code Online (Sandbox Code Playgroud)

这引发了以下异常

Caused by: java.lang.IllegalStateException: No data type for node: org.hibernate.hql.internal.ast.tree.IdentNode 
 \-[IDENT] IdentNode: 'programmeId' {originalText=programmeId}

    at org.hibernate.hql.internal.ast.tree.SelectClause.initializeExplicitSelectClause(SelectClause.java:174)
    at org.hibernate.hql.internal.ast.HqlSqlWalker.useSelectClause(HqlSqlWalker.java:924)
    at org.hibernate.hql.internal.ast.HqlSqlWalker.processQuery(HqlSqlWalker.java:692)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:665)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.collectionFunctionOrSubselect(HqlSqlBaseWalker.java:4905)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.inRhs(HqlSqlBaseWalker.java:4806)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.comparisonExpr(HqlSqlBaseWalker.java:4473) …
Run Code Online (Sandbox Code Playgroud)

java hibernate jpql

0
推荐指数
1
解决办法
6647
查看次数

Spring JPA只返回字段,而不返回实体

我有一个Query-annotated Spring JPA repo,它看起来像这样:

@Repository
public interface MainRepository 
extends 
    JpaRepository<MainEntity, MainEntity.ID>, 
    JpaSpecificationExecutor<MainEntity> {

    @Query("select e.start, e.finish,e.forename,e.surname from MainEntity e where e.volunteerId= :id "
        + "and e.areaId>0 and e.isAssignment=true order by e.start")
    List<MainEntity> findAssignments(@Param("id") int volunteerId);
}
Run Code Online (Sandbox Code Playgroud)

但是,尽管返回类型,但不会返回MainEntity对象列表.它返回与所请求的字段类型对应的List of Object [].

这是怎么回事???

java spring jpql spring-data-jpa

0
推荐指数
1
解决办法
1401
查看次数

Spring数据jpa - 返回对象的最佳方法?

我有这样的对象:

@Entity
public class DocumentationRecord {
    @Id
    @GeneratedValue
    private long id;

    private String topic;
    private boolean isParent;
    @OneToMany
    private List<DocumentationRecord> children;
...
}
Run Code Online (Sandbox Code Playgroud)

现在我想只获得主题和ID.有没有办法得到这样的格式:

[
{
id: 4234234,
topic: "fsdfsdf"
},...
]
Run Code Online (Sandbox Code Playgroud)

因为即使只使用此查询

public interface DocumentationRecordRepository extends CrudRepository<DocumentationRecord, Long> {

    @Query("SELECT d.topic as topic, d.id as id FROM DocumentationRecord d")
    List<DocumentationRecord> getAllTopics();
}
Run Code Online (Sandbox Code Playgroud)

我只能得到这样的记录:

[
  [
    "youngChild topic",
    317
  ],
  [
    "oldChild topic",
    318
  ],
  [
    "child topic",
    319
  ],
]
Run Code Online (Sandbox Code Playgroud)

我不喜欢数组数组我想获得具有属性id和主题的对象数组.实现这一目标最好的方法是什么?

spring hibernate jpa jpql spring-data-jpa

0
推荐指数
1
解决办法
1892
查看次数

JPQL 连接两个表

@Entity
@Table(name="tblUser")    
public class User {

@Id
@GeneratedValue
@Column(name="id")
private Long id;

@Column(name="email",nullable=false)
private String email;

@Column(name="password",nullable=false)
private String password;

@Column(name="first_name")
private String firstName;

@Column(name="last_name")
private String lastName;

@OneToMany(mappedBy="user")
private List<Address> addresses = new ArrayList<>();
}



@Entity
@Table(name="tblAddress")
public class Address {

@Id
@GeneratedValue
@Column
private Long id;

@Column
private String streat;

@Column
private String number;

@ManyToOne(fetch=FetchType.EAGER)
private User user;
}



public interface UserService {
List<User> findAll(); 
}



@Service
public class JpaUserService implements UserService {
@Autowired
private UserRepository userRepository;

@Override …
Run Code Online (Sandbox Code Playgroud)

java spring hibernate jpql

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

Spring Data JPA:DML操作不支持

我已经为Amazon Aurora数据库编写了一个查询,以在我的接口CrudRepositoryExtended中删除一些对象,但是当我执行该查询时,它将引发异常!

@Transactional
@Query("delete from HotelPrice hp where hp.updateDate < ?1 ")
void deletePriceOlderThan   (Date date);
Run Code Online (Sandbox Code Playgroud)

异常跟踪跟踪:

Caused by: java.lang.IllegalStateException: org.hibernate.hql.internal.QueryExecutionRequestException: Not supported for DML operations [delete from com.gamesa.backend.persistence.domain.backend.HotelPrice hp where hp.updateDate < ?1 ]
    at org.hibernate.jpa.internal.QueryImpl.getSingleResult(QueryImpl.java:554)
    at org.springframework.data.jpa.repository.query.JpaQueryExecution$SingleEntityExecution.doExecute(JpaQueryExecution.java:208)
    at org.springframework.data.jpa.repository.query.JpaQueryExecution.execute(JpaQueryExecution.java:87)
    at org.springframework.data.jpa.repository.query.AbstractJpaQuery.doExecute(AbstractJpaQuery.java:116)
    at org.springframework.data.jpa.repository.query.AbstractJpaQuery.execute(AbstractJpaQuery.java:106)
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:499)
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:477)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:56)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:282)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:136)
    ... 35 common frames omitted
Run Code Online (Sandbox Code Playgroud)

jpql spring-data spring-data-jpa spring-boot amazon-aurora

0
推荐指数
1
解决办法
1943
查看次数

如何在JPQL中删除作为实体名称的保留关键字 - Hibernate

我有一个简单的JOIN查询,我需要在Table_A和Order之间运行,但因为Order是保留的关键字,我收到以下错误:

org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: Order near line 1
Run Code Online (Sandbox Code Playgroud)

这是查询:

List<Tuple> list  = entityManager.createQuery(
                "select a " +
                        "from Table_A a " +
                        "join Order o on a.orderID = o.orderID " +
                        "where o.status = :status ", Tuple.class)
                .setParameter("status", "Completed")
                .getResultList();
Run Code Online (Sandbox Code Playgroud)

我已经解决了人们有类似困难的问题,但问题是列名称的问题,幸运的是有一个解决方法,但当关键字是实体名称时,我找不到解决方案.我不想因为这个障碍而改变班级名称,我想知道是否有人遇到过类似的问题,可以帮助我解决问题.

张贴类似问题的人还没有得到回答,请看这个链接: Similar Question

列名称出现问题的人通过执行以下操作解决了这个问题:

Question_1

问题2

hibernate jpa jpql

0
推荐指数
1
解决办法
402
查看次数

具有分页、排序和规范的 JPA

在我的Spring boot项目,我需要查询的表entity名为XrayVulnerabilityEntity具有的能力pagingsortingspecification

Pagingsorting实施似乎没问题。但是当我添加时Specification,它throws an error是这样的:

引起:org.springframework.beans.factory.BeanCreationException:创建名为“xrayVulnerabilityRepository”的bean时出错:调用init方法失败;嵌套异常是 java.lang.IllegalArgumentException:要么在除 Pageable 和 Sort 类型之外的所有参数上使用 @Param,要么根本不使用!

我使用的存储库:

@Repository
public interface XrayVulnerabilityRepository extends PagingAndSortingRepository<XrayVulnerabilityEntity,XrayVulnerabilityPK> , JpaSpecificationExecutor<XrayVulnerabilityEntity>{

    @Query("SELECT x FROM XrayVulnerabilityEntity x,DomainArtifactEntity d WHERE d.domainOrgName=:domainOrgNameParam AND x.domainArtifactId=d")
    public Page<XrayVulnerabilityEntity> findAll(@Param(value = "domainOrgNameParam") String domainOrgName,Specification<XrayVulnerabilityEntity> spec, Pageable pageable);

    @Query("SELECT COUNT(x) FROM XrayVulnerabilityEntity x,DomainArtifactEntity d WHERE d.domainOrgName=:domainOrgNameParam AND x.domainArtifactId=d")
    public Long getCount(@Param(value = "domainOrgNameParam") String domainOrgName,Specification<XrayVulnerabilityEntity> spec);

}
Run Code Online (Sandbox Code Playgroud)

我在实施时做错了 …

java sql spring jpql spring-data-jpa

0
推荐指数
1
解决办法
4565
查看次数

JPA:检查集合是否有具有属性的成员

在我的软件中,我有一个实体(我们称之为Member)和另一个实体(我们称之为State)的集合。我需要编写的查询应返回所有没有State特定属性值(例如5)的成员。

以下是实体的相关部分:

public class Member {
    @JoinColumn(name = "MEMBER_ID")
    @OneToMany
    private List<State> states;

    @Column
    private String name;
}

public class State {
    @Column
    private int property;
}
Run Code Online (Sandbox Code Playgroud)

Member请注意,和之间没有双向映射State,该映射是在关系 ( ) 的非拥有方声明的Member。在 SQL 中我会创建一个像这样的查询:

public class Member {
    @JoinColumn(name = "MEMBER_ID")
    @OneToMany
    private List<State> states;

    @Column
    private String name;
}

public class State {
    @Column
    private int property;
}
Run Code Online (Sandbox Code Playgroud)

但我不知道有什么方法可以在 JPQL 中实现相同的功能,而无需在关系的拥有方进行映射。有没有什么方法可以实现这一点而不必费心双向映射?

java hibernate jpa jpql

0
推荐指数
1
解决办法
1436
查看次数