Spring JPA 投影包括链接
Spring JPA Projection including links
给定具有一组预订对象的简单事件模型:
事件:
@Entity
public class Event {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long eventId;
private Date start;
private Date end;
private String title;
@OneToMany(mappedBy="event")
private Set<Booking> Bookings;
protected Event() {
// for JPA
}
// Getters and setters omitted for brevity
}
预订:
@Entity
public class Booking {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long bookingId;
private String title;
private String contact;
@ManyToOne
@JoinColumn(name="event_id", nullable=false)
private Event event;
public Booking() {
// for JPA
}
// Getters and setters omitted for brevity
}
每个都有一个 JpaRepository 接口,我已经创建了一个投影,以便在检索事件时可以包含预订的详细信息。
@Projection(name="with-booking", types=Event.class)
public interface EventWithBookingProjection {
public Date getStart();
public Date getEnd();
public String getTitle();
public List<Booking> getBookings();
}
这是有效的,因为预订已正确返回,但是预订对象没有它的 _links 对象,如果我自己检索它们,它就会这样做。如何检索预订对象及其关联链接,以便我可以对已检索到的预订对象执行操作?
即而不是:
{
"id":1,
"title":"Test Title",
"bookings":[
{
"title":"Test 1",
"contact":"Contact 1"
},
{
"title":"Test 2 ",
"contact":"Contact 2"
}
],
"end":"2015-06-06T11:30:00.000+0000",
"start":"2015-06-06T09:00:00.000+0000",
"_links":{
"self":{
"href":"http://localhost:8080/rest/events/1{?projection}",
"templated":true
},
"bookings":{
"href":"http://localhost:8080/rest/events/1/bookings"
}
}
}
我想得到:
{
"id":1,
"title":"Test Title",
"bookings":[
{
"title":"Test 1",
"contact":"Contact 1",
"_links":{
"self":{
"href":"http://localhost:8080/rest/bookings/23{?projection}",
"templated":true
},
"event":{
"href":"http://localhost:8080/rest/bookings/23/event"
}
}
},
{
"title":"Test 2 ",
"contact":"Contact 2",
"_links":{
"self":{
"href":"http://localhost:8080/rest/bookings/24{?projection}",
"templated":true
},
"event":{
"href":"http://localhost:8080/rest/bookings/24/event"
}
}
}
],
"end":"2015-06-06T11:30:00.000+0000",
"start":"2015-06-06T09:00:00.000+0000",
"_links":{
"self":{
"href":"http://localhost:8080/rest/events/1{?projection}",
"templated":true
},
"bookings":{
"href":"http://localhost:8080/rest/events/1/bookings"
}
}
}
这已在 spring-data 的最新快照版本中得到解决,默认情况下包含链接。通过更新我的 POM 以包含下面显示的内容,链接出现在嵌入式集合中
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-rest-webmvc</artifactId>
<version>2.4.0.M1</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-commons</artifactId>
<version>1.11.0.M1</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-rest-core</artifactId>
<version>2.4.0.M1</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>1.9.0.M1</version>
</dependency>
给定具有一组预订对象的简单事件模型:
事件:
@Entity
public class Event {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long eventId;
private Date start;
private Date end;
private String title;
@OneToMany(mappedBy="event")
private Set<Booking> Bookings;
protected Event() {
// for JPA
}
// Getters and setters omitted for brevity
}
预订:
@Entity
public class Booking {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long bookingId;
private String title;
private String contact;
@ManyToOne
@JoinColumn(name="event_id", nullable=false)
private Event event;
public Booking() {
// for JPA
}
// Getters and setters omitted for brevity
}
每个都有一个 JpaRepository 接口,我已经创建了一个投影,以便在检索事件时可以包含预订的详细信息。
@Projection(name="with-booking", types=Event.class)
public interface EventWithBookingProjection {
public Date getStart();
public Date getEnd();
public String getTitle();
public List<Booking> getBookings();
}
这是有效的,因为预订已正确返回,但是预订对象没有它的 _links 对象,如果我自己检索它们,它就会这样做。如何检索预订对象及其关联链接,以便我可以对已检索到的预订对象执行操作?
即而不是:
{
"id":1,
"title":"Test Title",
"bookings":[
{
"title":"Test 1",
"contact":"Contact 1"
},
{
"title":"Test 2 ",
"contact":"Contact 2"
}
],
"end":"2015-06-06T11:30:00.000+0000",
"start":"2015-06-06T09:00:00.000+0000",
"_links":{
"self":{
"href":"http://localhost:8080/rest/events/1{?projection}",
"templated":true
},
"bookings":{
"href":"http://localhost:8080/rest/events/1/bookings"
}
}
}
我想得到:
{
"id":1,
"title":"Test Title",
"bookings":[
{
"title":"Test 1",
"contact":"Contact 1",
"_links":{
"self":{
"href":"http://localhost:8080/rest/bookings/23{?projection}",
"templated":true
},
"event":{
"href":"http://localhost:8080/rest/bookings/23/event"
}
}
},
{
"title":"Test 2 ",
"contact":"Contact 2",
"_links":{
"self":{
"href":"http://localhost:8080/rest/bookings/24{?projection}",
"templated":true
},
"event":{
"href":"http://localhost:8080/rest/bookings/24/event"
}
}
}
],
"end":"2015-06-06T11:30:00.000+0000",
"start":"2015-06-06T09:00:00.000+0000",
"_links":{
"self":{
"href":"http://localhost:8080/rest/events/1{?projection}",
"templated":true
},
"bookings":{
"href":"http://localhost:8080/rest/events/1/bookings"
}
}
}
这已在 spring-data 的最新快照版本中得到解决,默认情况下包含链接。通过更新我的 POM 以包含下面显示的内容,链接出现在嵌入式集合中
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-rest-webmvc</artifactId>
<version>2.4.0.M1</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-commons</artifactId>
<version>1.11.0.M1</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-rest-core</artifactId>
<version>2.4.0.M1</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>1.9.0.M1</version>
</dependency>