Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在spring boot JPA中获得选择性列?_Java_Spring_Spring Boot_Jpa_Spring Data Jpa - Fatal编程技术网

Java 如何在spring boot JPA中获得选择性列?

Java 如何在spring boot JPA中获得选择性列?,java,spring,spring-boot,jpa,spring-data-jpa,Java,Spring,Spring Boot,Jpa,Spring Data Jpa,我不熟悉弹簧靴 我有两个实体Invite和User @Entity public class Invite { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; @Column(name="email") private String email_id; private String mobile; private

我不熟悉弹簧靴

我有两个实体Invite和User

@Entity
public class Invite {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    
    @Column(name="email")
    private String email_id;
    private String mobile;
    private String pincode;
    private String name;
    private String status;
    private Date created_on;
    private Date updated_on;
 
    //gettes and setters
}


@Entity
public class User {
    @Id
    @GeneratedValue(strategy= GenerationType.IDENTITY)
    private int id;
    
    @OneToOne
    private Invite invite;
    private String firstName;
    private String LastName;
    @JsonIgnore
    private String password;
    private Date created_on;
    private Date updated_on;

    // getters and setters

}
我想要以下数据

+---------+---------------------------------------------+
|  id     |   firstName    email_id         mobile      |
+-------------------+------------+----------------------+
|         |         |            |                      |
| 1       |Ram      | s@mail.com |      1111111111      |
|         |         |            |                      |
+---------+---------+------------+----------------------+
因此,我在UserRepository中创建了以下查询:

@Repository
public interface UserRepository extends JpaRepository<User, Integer> {

    
    @Query("select u.id,u.firstName,i.email_id, i.mobile from User u inner join u.invite i")
    public List<User> getUserDetails();
}
我知道这是因为返回值是Object类型的,我正试图将其输入用户

您能告诉我一种不创建额外DTO类或接口而获取任何数据的方法吗?

在用户类中为您选择的列编写一个构造函数,并在查询中使用。确保您还在Invite类中为电子邮件和手机使用构造函数,并在User的构造函数中使用它

@Query("select new com.example.jpa.JPA.entity.User(u.id,u.firstName,i.email_id, i.mobile) from User u inner join u.invite i")
public List<User> getUserDetails();
在用户类中为所选列编写构造函数并在查询中使用。确保您还在Invite类中为电子邮件和手机使用构造函数,并在User的构造函数中使用它

@Query("select new com.example.jpa.JPA.entity.User(u.id,u.firstName,i.email_id, i.mobile) from User u inner join u.invite i")
public List<User> getUserDetails();

很好,你已经知道问题是什么了

@查询选择u.id、u.firstName、i.email\u id、i.mobile from User u inner join u.invite i 列出用户详细信息; 您选择了一些列,但要求Data Jpa返回用户对象列表

所以您首先需要了解JPA规范对使用JPQL的说明

从用户u中选择u,其中u.id=:id->这将返回用户类型对象的列表 本机查询是:从用户中选择*,其中ID={您传递的任何值}

从用户u中选择u.username,其中u.id=:id->只返回用户名,也就是说是字符串类型。因此,如果使用,则返回对象类型为字符串类型;如果使用,则返回对象。生成的相应SQL是从用户u中选择u.USERNAME,其中u.id={id}

从用户u中选择u.id,u.username,其中u.id=:id->此返回对象[]。此时需要DTO投影将其映射到所需的适当类型

对于本机JPA实现,您可以使用或

我主要使用JPA规范中的DTO投影,而不使用查询投影,因此我给出了一个DTO投影的示例,但是上面的文档提供了如何使用每个抽象/特性的很好的参考

定义一个类来表示我考虑的DTO和包:com.example。包名很重要,因为您需要完整的类名,以便在JPQL中引用 包com.example; 类UserDTO{ int-id; 字符串名, 字符串电子邮件地址; 字符串移动; //所有args构造函数都是必需的,并且是虚构的 public Userint id、String firstName、String email_id、String mobile{ //任务 } //接球手和接球手 } 在存储库中:

@Repository
public interface UserRepository extends JpaRepository<User, Integer> {

    
    @Query("select u.id,u.firstName,i.email_id, i.mobile from User u inner join u.invite i")
    public List<User> getUserDetails();
}
@Queryselect new com.example.UserDTOu.id、u.firstName、i.email\u id、i.mobile from User u inner join u.invite i 列出用户详细信息; 最重要的是:新的完全限定的类名所有要获取的列


这就是如何将DTO投影与JPQL和数据Jpa存储库结合使用。

很好,您已经知道了问题所在

@查询选择u.id、u.firstName、i.email\u id、i.mobile from User u inner join u.invite i 列出用户详细信息; 您选择了一些列,但要求Data Jpa返回用户对象列表

所以您首先需要了解JPA规范对使用JPQL的说明

从用户u中选择u,其中u.id=:id->这将返回用户类型对象的列表 本机查询是:从用户中选择*,其中ID={您传递的任何值}

从用户u中选择u.username,其中u.id=:id->只返回用户名,也就是说是字符串类型。因此,如果使用,则返回对象类型为字符串类型;如果使用,则返回对象。生成的相应SQL是从用户u中选择u.USERNAME,其中u.id={id}

从用户u中选择u.id,u.username,其中u.id=:id->此返回对象[]。此时需要DTO投影将其映射到所需的适当类型

对于本机JPA实现,您可以使用或

我主要使用JPA规范中的DTO投影,而不使用查询投影,因此我给出了一个DTO投影的示例,但是上面的文档提供了如何使用每个抽象/特性的很好的参考

定义一个类来表示我考虑的DTO和包:com.example。包名很重要,因为您需要完整的类名,以便在JPQL中引用 包com.example; 类UserDTO{ int-id; 字符串名, 字符串电子邮件地址; 字符串移动; //所有args构造函数都是必需的,并且是虚构的 public Userint id、String firstName、String email_id、String mobile{ //任务 } //接球手和接球手 } 在存储库中:

@Repository
public interface UserRepository extends JpaRepository<User, Integer> {

    
    @Query("select u.id,u.firstName,i.email_id, i.mobile from User u inner join u.invite i")
    public List<User> getUserDetails();
}
@Queryselect new com.example.UserDTOu.id、u.firstName、i.email\u id、i.mobile from User u inner join u.invite i 列出用户详细信息; 最重要的是:新的完全限定的类名所有要获取的列


这就是如何在JPQL和数据Jpa存储库中使用DTO投影的方法。

如果您希望在
查询结果或自定义查询结果,只需使用jpa投影即可。使用相关属性方法创建接口

如果您想在查询结果中选择字段或自定义查询结果,只需使用jpa投影即可。使用相关属性方法创建一个接口

试试这个..这对我来说很有用: spring.jpa.hibernate.naming strategy=org.hibernate.cfg.DefaultNamingStrategy


这是要添加到应用程序中的。属性试试这个..这对我来说很有用: spring.jpa.hibernate.naming strategy=org.hibernate.cfg.DefaultNamingStrategy


这将添加到application.properties中

您错过了关键字newselect new com.example.jpa.jpa.entity.Useru.id,new com.example.userdefinedobjcta.firstName from。。。这是有效的语句吗?@JavaLearner no,而是调用用户构造函数中的内部构造函数。您错过了关键字newselect new com.example.jpa.jpa.entity.Useru.id,new com.example.userdefinedobjcta.firstName from。。。这是有效的语句吗?@JavaLearner-Nope,而是调用用户构造函数中的内部构造函数。此外,您需要了解问题与Spring Boot无关。这是一个与JPA相关的问题,可以使用JPA查询或@Query和Query投影接口和类的数据JPA抽象来解决。更正标记并添加到这一点上,您需要了解问题与Spring Boot无关。这是一个与JPA相关的问题,可以使用JPA查询或@Query和Query投影接口和类的数据JPA抽象来解决。更正标记谢谢你。我们可以用同样的方法使用元组吗?是的,检查我共享的链接。是Hibernate的顶级贡献者之一,浏览他的博客是你能做的最好的事情之一。你也应该通过和你能给我看同样的例子使用TupleCan你请检查这个我分享了上面。这里有一个关于DTO和TupleThank的例子。我们可以用同样的方法使用元组吗?是的,检查我共享的链接。是Hibernate的顶级贡献者之一,浏览他的博客是你能做的最好的事情之一。你也应该通过和你能给我看同样的例子使用TupleCan你请检查这个我分享了上面。有一个关于DTO的例子,TupleOP说在不创建额外DTO类或接口的情况下获取任何数据,而TupleOP说在不创建额外DTO类或接口的情况下获取任何数据