我有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)需要额外的努力才能将它映射到实体编译时间/运行时间(不确定)
答案 0 :(得分:0)
您可以在JPA中使用本机查询。
@Query(&#34;从餐馆中选择名称&#34;,nativeQuery = true) public list findRestaurants();
您必须映射到对象。