无法在 Spring 引导应用程序中找到 DTO
Unable to locate DTO in Spring Boot Application
我已经定义了我的 DTO,但它也找不到它。
我已经在实体包中创建了 DTO,并且只是在我需要的任何地方导入了包,它在编译时没有给出任何错误,而 运行 它在初始化 JPA EntityManagerFactory 之后出现的代码为什么所以请帮助我。
CartDTO file
package com.project.books.entity;
public class CartDTO {
private String name;
private String username;
private String status;
private int price;
public CartDTO() {
}
public CartDTO(String name, String username, String status, int price) {
this.name = name;
this.username = username;
this.status = status;
this.price = price;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
}
cartRepository file
package com.project.books.dao;
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import com.project.books.entity.Cart;
import com.project.books.entity.CartDTO;
public interface CartRepository extends JpaRepository<Cart,Integer> {
@Query("select c from Cart c where c.username = :username AND c.status = :status")
public List<Cart> findAllByUsernameAndStatus(@Param("username")String username,
@Param("status")String status);
@Query("select new CartDTO(c.name,c.username,c.status,sum(c.price)) from Cart c where c.username = :username AND c.status = :status GROUP BY username,status")
public CartDTO sumPriceByUsernameAndStatus(@Param("username")String username,
@Param("status")String status);
}
Myerror
Unable to locate class [CartDTO]
at org.hibernate.hql.internal.ast.tree.ConstructorNode.resolveConstructor(ConstructorNode.java:177) ~[hibernate-core-5.4.18.Final.jar:5.4.18.Final]
at org.hibernate.hql.internal.ast.tree.ConstructorNode.prepare(ConstructorNode.java:144) ~[hibernate-core-5.4.18.Final.jar:5.4.18.Final]
at org.hibernate.hql.internal.ast.HqlSqlWalker.processConstructor(HqlSqlWalker.java:1258) ~[hibernate-core-5.4.18.Final.jar:5.4.18.Final]
Error creating bean with name 'cartRepository': FactoryBean threw exception on object creation; nested exception is java.lang.IllegalArgumentException: Validation failed for query for method public abstract com.project.books.entity.CartDTO com.project.books.dao.CartRepository.sumPriceByUsernameAndStatus(java.lang.String,java.lang.String)!
at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:176) ~[spring-beans-5.2.8.RELEASE.jar:5.2.8.RELEASE]
at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:101) ~[spring-beans-5.2.8.RELEASE.jar:5.2.8.RELEASE]
Validation failed for query for method public abstract com.project.books.entity.CartDTO com.project.books.dao.CartRepository.sumPriceByUsernameAndStatus(java.lang.String,java.lang.String)!
at org.springframework.data.jpa.repository.query.SimpleJpaQuery.validateQuery(SimpleJpaQuery.java:93) ~[spring-data-jpa-2.3.2.RELEASE.jar:2.3.2.RELEASE]
Unable to locate class [CartDTO] [select new CartDTO(c.name,c.username,c.status,sum(c.price)) from com.project.books.entity.Cart c where c.username = :username AND c.status = :status GROUP BY username,status]
at org.hibernate.hql.internal.ast.QuerySyntaxException.convert(QuerySyntaxException.java:74) ~[hibernate-core-5.4.18.Final.jar:5.4.18.Final]
at org.hibernate.hql.internal.ast.ErrorTracker.throwQueryException(ErrorTracker.java:93) ~[hibernate-core-5.4.18.Final.j
请帮我解决一下。
让我通过这个查询告诉你我的意思我只需要所有价格的总和,其中用户名是用户登录,状态是一些字符串。
您必须使用完全限定名称:
@Query("select new com.project.books.entity.CartDTO(c.name,c.username,c.status,sum(c.price)) from Cart c where c.username = :username AND c.status = :status GROUP BY username,status")
public CartDTO sumPriceByUsernameAndStatus(@Param("username")String username,
@Param("status")String status);
当您查询实体时,如果没有设置 Class 的简单名称,您可以使用实体名称。
但是 DTO 没有这样的名称,因此您必须使用完全限定名称。
此外,您必须将构造函数更改为
public CartDTO(String name, String username, String status, long price) {
因为和 returns 长。
我已经定义了我的 DTO,但它也找不到它。 我已经在实体包中创建了 DTO,并且只是在我需要的任何地方导入了包,它在编译时没有给出任何错误,而 运行 它在初始化 JPA EntityManagerFactory 之后出现的代码为什么所以请帮助我。
CartDTO file
package com.project.books.entity;
public class CartDTO {
private String name;
private String username;
private String status;
private int price;
public CartDTO() {
}
public CartDTO(String name, String username, String status, int price) {
this.name = name;
this.username = username;
this.status = status;
this.price = price;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
}
cartRepository file
package com.project.books.dao;
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import com.project.books.entity.Cart;
import com.project.books.entity.CartDTO;
public interface CartRepository extends JpaRepository<Cart,Integer> {
@Query("select c from Cart c where c.username = :username AND c.status = :status")
public List<Cart> findAllByUsernameAndStatus(@Param("username")String username,
@Param("status")String status);
@Query("select new CartDTO(c.name,c.username,c.status,sum(c.price)) from Cart c where c.username = :username AND c.status = :status GROUP BY username,status")
public CartDTO sumPriceByUsernameAndStatus(@Param("username")String username,
@Param("status")String status);
}
Myerror
Unable to locate class [CartDTO]
at org.hibernate.hql.internal.ast.tree.ConstructorNode.resolveConstructor(ConstructorNode.java:177) ~[hibernate-core-5.4.18.Final.jar:5.4.18.Final]
at org.hibernate.hql.internal.ast.tree.ConstructorNode.prepare(ConstructorNode.java:144) ~[hibernate-core-5.4.18.Final.jar:5.4.18.Final]
at org.hibernate.hql.internal.ast.HqlSqlWalker.processConstructor(HqlSqlWalker.java:1258) ~[hibernate-core-5.4.18.Final.jar:5.4.18.Final]
Error creating bean with name 'cartRepository': FactoryBean threw exception on object creation; nested exception is java.lang.IllegalArgumentException: Validation failed for query for method public abstract com.project.books.entity.CartDTO com.project.books.dao.CartRepository.sumPriceByUsernameAndStatus(java.lang.String,java.lang.String)!
at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:176) ~[spring-beans-5.2.8.RELEASE.jar:5.2.8.RELEASE]
at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:101) ~[spring-beans-5.2.8.RELEASE.jar:5.2.8.RELEASE]
Validation failed for query for method public abstract com.project.books.entity.CartDTO com.project.books.dao.CartRepository.sumPriceByUsernameAndStatus(java.lang.String,java.lang.String)!
at org.springframework.data.jpa.repository.query.SimpleJpaQuery.validateQuery(SimpleJpaQuery.java:93) ~[spring-data-jpa-2.3.2.RELEASE.jar:2.3.2.RELEASE]
Unable to locate class [CartDTO] [select new CartDTO(c.name,c.username,c.status,sum(c.price)) from com.project.books.entity.Cart c where c.username = :username AND c.status = :status GROUP BY username,status]
at org.hibernate.hql.internal.ast.QuerySyntaxException.convert(QuerySyntaxException.java:74) ~[hibernate-core-5.4.18.Final.jar:5.4.18.Final]
at org.hibernate.hql.internal.ast.ErrorTracker.throwQueryException(ErrorTracker.java:93) ~[hibernate-core-5.4.18.Final.j
请帮我解决一下。 让我通过这个查询告诉你我的意思我只需要所有价格的总和,其中用户名是用户登录,状态是一些字符串。
您必须使用完全限定名称:
@Query("select new com.project.books.entity.CartDTO(c.name,c.username,c.status,sum(c.price)) from Cart c where c.username = :username AND c.status = :status GROUP BY username,status")
public CartDTO sumPriceByUsernameAndStatus(@Param("username")String username,
@Param("status")String status);
当您查询实体时,如果没有设置 Class 的简单名称,您可以使用实体名称。
但是 DTO 没有这样的名称,因此您必须使用完全限定名称。
此外,您必须将构造函数更改为
public CartDTO(String name, String username, String status, long price) {
因为和 returns 长。