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);