我的问题是关于Spring数据生成查询的方式。
我有两个实体:Message,Sender
@Entity
public class Message extends BaseEntity {
@ManyToOne
protected Account sender;
}
我打电话给
messageDao.findBySenderId(Long id)
结果是查询两个表中的所有列,两个表之间有left outer join
,但我的期望只是从消息表where sender_id =
中选择传递的值。
那么有没有办法强制只选择第一个消息实体而不是与另一个消息实体连接?我想在where子句中使用简单的条件 通过使用findBy而不是自定义@Query
答案 0 :(得分:3)
您需要一个类似(未经测试)的存储库:
@Repository
public interface MessageRepository extends JpaRepository<Message, Long> {
Message findFirstBySenderId(Long id);
}
请参阅https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.query-methods
答案 1 :(得分:0)
我认为Hibernate正在执行LEFT JOIN
,因为您的@ManyToOne
是optional = true
(默认)。
尝试:
@ManyTone(optional = false)
你会看到Hibernate在没有JOIN
的情况下进行查询,如你所料。
答案 2 :(得分:0)
您可以将访存类型LAZY用于关联类型:
@ManyToOne(optional = false, fetch = FetchType.LAZY)