Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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 JPA:有没有办法运行一个只访问几列的简单SELECT语句?_Java_Jpa_Jdbc - Fatal编程技术网

Java JPA:有没有办法运行一个只访问几列的简单SELECT语句?

Java JPA:有没有办法运行一个只访问几列的简单SELECT语句?,java,jpa,jdbc,Java,Jpa,Jdbc,我是JPA新手,所以如果我的问题看起来很愚蠢,请原谅我 我们在项目中使用了JPA。我看到每个实体对象都有一个与表的直接映射,表中的每一行都是该实体类型的对象 但是,假设我只想访问一个表的一列或两列,我该怎么做呢?我问的原因是因为我手头的任务 有两张桌子。第一个表使用JPA设置了所有内容,以便可以将每一行转换为对象类型。第一个表有一列在第二个表中引用,即表a有列CLOTH\u ID,表B有列CLOTH\u ID和CLOTH\u DESCRIPTIONCLOTH_ID用于表A和B;但是B具有与CLO

我是JPA新手,所以如果我的问题看起来很愚蠢,请原谅我

我们在项目中使用了JPA。我看到每个实体对象都有一个与表的直接映射,表中的每一行都是该实体类型的对象

但是,假设我只想访问一个表的一列或两列,我该怎么做呢?我问的原因是因为我手头的任务

有两张桌子。第一个表使用JPA设置了所有内容,以便可以将每一行转换为对象类型。第一个表有一列在第二个表中引用,即表
a
有列
CLOTH\u ID
,表
B
有列
CLOTH\u ID
CLOTH\u DESCRIPTION
CLOTH_ID
用于表
A
B
;但是
B
具有与
CLOTH\u ID
相对应的
CLOTH\u DESCRIPTION


我正在网页中显示表格
A
,但我还需要在网页中显示:
CLOTH\u DESCRIPTION
。是否有一种面向JPA的方法可以做到这一点,或者我最好使用常规JDBC来提取
布料描述

我假设您有以下设置:

@Entity
@Table(name="A")
class A {

    @ManyToOne
    @JoinColumn(name="CLOTH_ID")
    private B cloth;

    //...

}

@Entity
@Table(name="B")
class B {
    @Id
    @Column(name="CLOTH_ID")
    private int id;

    @Column(name="CLOTH_DESCRIPTION")
    private String description;

    //...
}
如果你不。。。你做错了(也就是说,这不是惯用的JPA用法)。您有以下选项:

只需获取
A
在这种情况下,默认情况下,
@manytone
关系也将被急切地获取。然后只需在Java中调用:

a.getCloth().getDescription()
首选此方法,因为它是最简单和最惯用的方法,除非B中的列数很大

对自定义列使用JPA查询: 在这种情况下,查询返回
列表
,其中
对象[]
实际上包含两个元素:
A
字符串

同上,但使用自定义DTO: 和稍微修改的查询:

SELECT new Adto(a, a.b.description)
FROM A a
WHERE a.id = :id

我假设您具有以下设置:

@Entity
@Table(name="A")
class A {

    @ManyToOne
    @JoinColumn(name="CLOTH_ID")
    private B cloth;

    //...

}

@Entity
@Table(name="B")
class B {
    @Id
    @Column(name="CLOTH_ID")
    private int id;

    @Column(name="CLOTH_DESCRIPTION")
    private String description;

    //...
}
如果你不。。。你做错了(也就是说,这不是惯用的JPA用法)。您有以下选项:

只需获取
A
在这种情况下,默认情况下,
@manytone
关系也将被急切地获取。然后只需在Java中调用:

a.getCloth().getDescription()
首选此方法,因为它是最简单和最惯用的方法,除非B中的列数很大

对自定义列使用JPA查询: 在这种情况下,查询返回
列表
,其中
对象[]
实际上包含两个元素:
A
字符串

同上,但使用自定义DTO: 和稍微修改的查询:

SELECT new Adto(a, a.b.description)
FROM A a
WHERE a.id = :id

很高兴我能帮忙。如果需要进一步的帮助,请考虑或提供一些细节。如果需要进一步的帮助,请考虑或提供一些细节。