JPA查询方法特定列没有Query

时间:2017-03-27 04:15:28

标签: hibernate jpa spring-boot

我有DB Schema

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;

优惠

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

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

@JsonIgnore
@ManyToMany(mappedBy="offer")
private List<Restaurants> restaurants;

现在我想编写JPA Repo功能,该功能可以获取有关特定餐厅的信息(在这种情况下只是名称而不是餐厅)。如何在不编写任何查询的情况下使用JPA函数获取此函数,我已使用此方法完成此操作:

@Query(value = "select name from Restaurants where id = ?1")
public String findById1(long id);

但是a)我不想在此使用查询。

还可以说,而不仅仅是名称还有其他属性,如员工数量,评级等,然后如何获得所有没有获得优惠。我的意思是,如果我使用 findOne ,那么它也会获得优惠,因此它运行了一个额外的查询,这是我不想要的,也没有使用@Query。(如果可能的话)。

P.S。 - 我试图避免@Query,因为我认为这将是性能开销,因为JPA(Hibernate)需要额外的努力才能将它映射到实体编译时间/运行时间(不确定)

1 个答案:

答案 0 :(得分:0)

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

@Query(&#34;从餐馆中选择名称&#34;,nativeQuery = true) public list findRestaurants();

您必须映射到对象。