A j*_*A j 0 spring-data spring-data-jpa
我是 Spring JPA 的新手(或者说是在很长一段时间后研究它),我需要一些帮助来编写 JPA 存储库。我有一个实体类 Itinerary 和 User。两者之间是一对一的关系。
@Entity
@Table(name = "ITINERARY")
public class Itinerary implements Serializable {
@Id
@Column(name = "ID")
@GeneratedValue(generator = "Itinerary_IDGenerator", strategy = GenerationType.SEQUENCE)
@SequenceGenerator(name = "Itinerary_IDGenerator", sequenceName = "Itinerary_IDGenerator", allocationSize = 1)
private long id;
@Basic(optional = false)
@Column(nullable = false)
@Temporal(TemporalType.DATE)
private Date itineraryDate;
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "USER_ID")
User user;
}
@Entity
@Table(name = "USER")
public class User implements Serializable {
@Id
@Column(name = "ID")
@GeneratedValue(generator = "User_IDGenerator", strategy = GenerationType.SEQUENCE)
@SequenceGenerator(name = "User_IDGenerator", sequenceName = "User_IDGenerator", allocationSize = 1)
private long id;
@Basic(optional = false)
@Column(unique = true, nullable = false)
private String signInName;
}
Run Code Online (Sandbox Code Playgroud)
我想为 Itinerary 实体编写一个 Spring JPA 存储库,以便有一个方法可以返回用户的行程(具有特定的 singInName)和行程日期。我写了如下接口,但是不知道怎么指定spring查询。我提供了一个有效的 JPA 查询。
public interface ItineraryRepository extends Repository<Itinerary, Long> {
//String queryStr = "select i from Itinerary i where i.user.signInName = '" + signedInUser + "' and i.itineraryDate = :today";
@Query(select i from Itinerary i where i.user.signInName = :signInName and i.itineraryDate = :today)
Itinerary findBySignInNameAndDate(@Param("signInName") String signInName, @Param("itineraryDate") Date itineraryDate);
}
Run Code Online (Sandbox Code Playgroud)
我在查询中遇到错误。
Invalid derived query! No property signInName found for type Itinerary!
Run Code Online (Sandbox Code Playgroud)
和
Syntax error on tokens, delete these tokens
Run Code Online (Sandbox Code Playgroud)
如何将此查询转换为 spring 查询?我在文档中找不到示例。我不确定这是否可能,以及我是否错误地使用了存储库。
在您的存储库界面中使用此方法。而且不需要@Query
findByItineraryDateAndUser_SignInName(Date itineraryDate, String signInName);
Run Code Online (Sandbox Code Playgroud)
Spring 数据足够智能,可以根据您的方法名称(至少在简单查询情况下)了解它需要使用什么查询来获取结果。
User_SignInName 指定在属性 user 中查找属性 signInName。
| 归档时间: |
|
| 查看次数: |
3356 次 |
| 最近记录: |