Spring boot 通过REST公开的一对多jpa映射上的getItems()方法存在问题
对于标题中libs的最新版本(1.3.0.M4),当属性方法命名为Spring boot 通过REST公开的一对多jpa映射上的getItems()方法存在问题,spring-boot,spring-data,spring-data-jpa,spring-data-rest,Spring Boot,Spring Data,Spring Data Jpa,Spring Data Rest,对于标题中libs的最新版本(1.3.0.M4),当属性方法命名为getItems()/setItems()时,我遇到了一对多(LoggingRequest->LoggingRequestItem)关系的问题。LoggingRequest保存一对多的LoggingRequestItem 这两个存储库都是通过rest公开的 @Entity @Table(name = "LOGGING_REQUESTS") public class LoggingRequest extends StandardPe
getItems()/setItems()
时,我遇到了一对多(LoggingRequest->LoggingRequestItem
)关系的问题。LoggingRequest
保存一对多的LoggingRequestItem
这两个存储库都是通过rest公开的
@Entity
@Table(name = "LOGGING_REQUESTS")
public class LoggingRequest extends StandardPersistentEntity implements Serializable {
...
@OneToMany(cascade = CascadeType.ALL, mappedBy = "loggingRequest")
@JsonProperty(value="items")
public Collection<LoggingRequestItem> getItems() {
return items;
}
@JsonProperty(value="items")
public void setItems(Collection<LoggingRequestItem> data) {
this.items = data;
}
}
当方法名称更改为类似getLoggingRequestItems()
的其他名称时,返回的json不同:
{
"owner" : "test",
"status" : "NEW",
"statusChangedAt" : "2015-08-17T15:24:19.975",
"createdAt" : "2015-08-17T15:24:19.972",
"items" : [ {
"variableData" : {
"variableName" : "BR2.BWS.2L1.H_ROT:I_TOTAL_OUT",
"datatype" : "NUMERIC",
"clientLogOnChange" : false,
"loggingRequired" : true,
"unit" : "bits",
"description" : "integral bits profile surface OUT",
"clientLogFixedRateMs" : 3600,
"deadtimeIntervalType" : "SECOND",
"fixedLoggingIntervalType" : "HOUR",
"clientRoundingCompare" : 2,
"clientRoundingLog" : null,
"dvnMaxSize" : 1,
...
}
}
原则上,关联集合的内容似乎取决于方法名称
我错过了什么?它是某个地方的虫子吗
提前感谢,,
Jakub我实际上找到了一个答案:使用spring devtools重新加载动态更改方法并不总是有效的。重新启动项目时,两种方法的行为完全相同(这是一个链接):
但是,当我明确要求这个登录请求时,我得到了它,但没有链接到项目:
{
"id" : 6303064632841896,
"owner" : "TEST",
"status" : "NEW",
"statusChangedAt" : "2015-08-27T16:13:16.436",
"createdAt" : "2015-08-27T16:13:16.436",
"_links" : {
"self" : {
"href" : "http://localhost:8080/api/loggingRequests/6303064632841896",
"templated" : false
},
"loggingRequest" : {
"href" : "http://localhost:8080/api/loggingRequests/6303064632841896",
"templated" : false
}
}
}
现在,当我跟随链接时,我得到一个空响应(而此请求有100个项目):
你知道为什么会这样吗?我已经检查了Response对象,这些项都在那里,但是它们没有正确地呈现到输出中 我实际上找到了一个答案:使用spring devtools reload动态更改方法并不总是有效的。重新启动项目时,两种方法的行为完全相同(这是一个链接):
但是,当我明确要求这个登录请求时,我得到了它,但没有链接到项目:
{
"id" : 6303064632841896,
"owner" : "TEST",
"status" : "NEW",
"statusChangedAt" : "2015-08-27T16:13:16.436",
"createdAt" : "2015-08-27T16:13:16.436",
"_links" : {
"self" : {
"href" : "http://localhost:8080/api/loggingRequests/6303064632841896",
"templated" : false
},
"loggingRequest" : {
"href" : "http://localhost:8080/api/loggingRequests/6303064632841896",
"templated" : false
}
}
}
现在,当我跟随链接时,我得到一个空响应(而此请求有100个项目):
你知道为什么会这样吗?我已经检查了Response对象,这些项都在那里,但是它们没有正确地呈现到输出中 该项目基于spring boot、spring data jpa、spring data rest、hibernate for jpa。该项目基于spring boot、spring data jpa、spring data rest、hibernate for jpa。
{
"id" : 6303064632841896,
"owner" : "TEST",
"status" : "NEW",
"statusChangedAt" : "2015-08-27T16:13:16.436",
"createdAt" : "2015-08-27T16:13:16.436",
"_links" : {
"self" : {
"href" : "http://localhost:8080/api/loggingRequests/6303064632841896",
"templated" : false
},
"loggingRequest" : {
"href" : "http://localhost:8080/api/loggingRequests/6303064632841896",
"templated" : false
}
}
}
curl -i -X GET -H "Content-Type:application/json" http://localhost:8080/api/loggingRequests/6303064632841896/loggingRequestItems
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: application/hal+json;charset=UTF-8
Transfer-Encoding: chunked
Date: Fri, 28 Aug 2015 13:26:12 GMT
{
"_links" : {
"self" : {
"href" : "http://localhost:8080/api/loggingRequests/6303064632841896/loggingRequestItems",
"templated" : false
}
}
}