【问题标题】:JPA Query methods specific column without QueryJPA 查询方法特定列没有查询
【发布时间】:2017-08-19 15:43:17
【问题描述】:

我有数据库架构

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 函数来获取有关特定餐厅的信息(在这种情况下是 ONLY NAME 但不是餐厅)。如何在不编写任何查询的情况下使用 JPA 函数获得此功能,我已使用此功能完成此操作:

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

但是a)我不想在这个中使用查询。

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

附: - 我试图避免使用@Query,因为我认为这将是性能开销,因为 JPA(Hibernate) 需要额外的努力才能将其映射到 编译时/运行时(不确定)

【问题讨论】:

  • 是什么让您认为没有@Query 就没有开销?如果你只是写select name from restaurant,Hibernate 不会为你构造一个Restaurant 实体
  • 并且,Restaurant.offers 不会有“额外查询”,因为您已将其延迟获取。

标签: hibernate jpa spring-boot


【解决方案1】:

您可以通过 JPA 使用本机查询。

@Query("从餐馆中选择名字", nativeQuery = true) 公共列表 findRestaurants();

您必须映射到对象。

【讨论】:

  • 谢谢,但这就是重点。我不想使用查询,我在问,有没有一种方法可以在不编写查询的情况下做到这一点。
  • 如果你想使用 Spring 基础设施,那就不行。调查不同的工具,例如jdbi
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-14
  • 2021-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
相关资源
最近更新 更多