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
Hibernate JPA查询方法不带查询的特定列_Hibernate_Jpa_Spring Boot - Fatal编程技术网

Hibernate JPA查询方法不带查询的特定列

Hibernate JPA查询方法不带查询的特定列,hibernate,jpa,spring-boot,Hibernate,Jpa,Spring Boot,我的数据库模式是 CREATE TABLE IF NOT EXISTS `offers` ( `id` int(11) NOT NULL, `detail` varchar(255) NOT NULL `status` varchar(255) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; CREATE TABLE `restaurants` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name

我的数据库模式是

CREATE TABLE IF NOT EXISTS `offers` (
`id` int(11) NOT NULL,
  `detail` varchar(255) NOT NULL
 `status` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE `restaurants` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `name` varchar(255) NOT NULL,
 `status` varchar(255) NOT NULL
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

CREATE TABLE `rest_offer_map` (
 `id` int(11) NOT NULL,
 `rest_id` int(11) NOT NULL,
 `offer_id` int(11) NOT NULL
 `status` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
和实体作为

餐厅

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

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


@ManyToMany(fetch=FetchType.LAZY)
@JoinTable(name="rest_offer_map",
           joinColumns={@JoinColumn(name="rest_id", referencedColumnName="id")},
           inverseJoinColumns={@JoinColumn(name="offer_id",referencedColumnName="id")}
            )
private List<Offers> offer;
但是a)我不想在这里使用查询

也可以说,除了名字之外,还有其他属性,如员工数量、评级等。那么,如何在不获得报价的情况下获得所有。我的意思是,如果我使用findOne,那么它也会收到报价,因此它会运行一个额外的查询,这是我不想要的,也没有使用@query。(如果可能的话)


另外,我试图避免@Query,因为我认为这会增加性能开销,因为JPA(Hibernate)需要额外的努力才能在编译时/运行时将其映射到实体(不确定)

您可以在JPA中使用本机查询

@查询(“从餐厅选择名称”,nativeQuery=true) 公共列表FindRestarants()


您必须映射到对象。

谢谢,但这就是重点。我不想使用查询,我在问,有没有一种不用编写查询就可以做到的方法。如果你想使用Spring基础设施,那么没有。研究不同的工具,例如。是什么让你认为没有
@query
,就没有开销?如果您只需编写
selectname from restaurant
,Hibernate将不会为您构建
restaurant
实体,并且不会对
restaurant.offers
进行“额外查询”,因为您已将其设置为延迟获取。
@Id
@GeneratedValue
@Column(name="id")
private long id;

@Column(name="detail")
private String detail;

@JsonIgnore
@ManyToMany(mappedBy="offer")
private List<Restaurants> restaurants;
@Query(value = "select name from Restaurants where id = ?1")
public String findById1(long id);