首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring、Creation和lastUpdate返回null

Spring、Creation和lastUpdate返回null
EN

Stack Overflow用户
提问于 2014-10-28 20:10:25
回答 1查看 550关注 0票数 1

我在回应PUT请求时遇到了一些问题。除了这两个字段:"created":"null","lastUpdated":"null“之外,所有更改都将被持久化并返回所有数据。我不明白为什么我在这里有个空壳。

然而,在发布后,所有数据都正常工作,所有数据都包含在响应中,包括两个有问题的字段:“创建”:“2014-10-28T19:55:37.889Z”,"lastUpdated":"2014-10-28T19:55:37.889Z“

我的实体看起来如下:

代码语言:javascript
复制
@Entity
@Table(name = "projects")
@JsonIgnoreProperties(ignoreUnknown = true)
public class Project extends AbstractPersistable {

private String key;
private String name;
private String description;

@Column(name = "created_date", nullable = false, updatable = false)
@JsonSerialize(using = DateTimeSerializer.class)
@Type(type = "org.jadira.usertype.dateandtime.joda.PersistentDateTime")
private DateTime created;

@Column(name = "last_updated_date", nullable = false)
@Type(type = "org.jadira.usertype.dateandtime.joda.PersistentDateTime")
@JsonSerialize(using = DateTimeSerializer.class)
private DateTime lastUpdated;

@PrePersist
public void onPersist() {
    this.created = new DateTime();
    this.lastUpdated = new DateTime();
}


@PreUpdate
public void onUpdate() {
    this.lastUpdated = new DateTime();
}

//Getter and setter methods

这是我的资源类

代码语言:javascript
复制
@Path("/")
@Component
public class ProjectsResource {

@Autowired
private ProjectService projectService;

@POST
@Path("projects")
@Consumes(CustomMediaTypes.SMARTGWT_JSON)
@Produces(CustomMediaTypes.SMARTGWT_JSON)
public Response create(Project project) throws ServiceException {
    projectService.createOrSave(project);
    ProjectModelsSerializer jsonSerializer = new ProjectModelsSerializer();
    jsonSerializer.visit(project);
    return     Response.status(Response.Status.CREATED).entity(jsonSerializer.asServiceResponse("success")).build();
}

@PUT
@Path("projects")
@Consumes(CustomMediaTypes.SMARTGWT_JSON)
@Produces(CustomMediaTypes.SMARTGWT_JSON)
public Object update(Project project) throws ServiceException {
    projectService.createOrSave(project);

    ProjectModelsSerializer jsonSerializer = new ProjectModelsSerializer();
    jsonSerializer.visit(project);
    return Response.status(Response.Status.CREATED).entity(jsonSerializer.asServiceResponse("success")).build();
}
EN

回答 1

Stack Overflow用户

发布于 2014-10-30 17:13:41

我猜作为参数的项目实例不是由持久性上下文管理的。

如果在您的javax.persistence.EntityManager#merge方法中调用createOrSave,作为参数提供的实体实例将不会被管理。因此,您无法从数据库中看到任何更改(例如创建日期或最后更新日期)。

但是,javax.persistence.EntityManager#merge创建并返回实体的一个新实例,复制该实体状态,并使此新实例得到管理,并具有创建日期或最后更新日期。

因此,方法projectService.createOrSave(项目)应该返回对托管对象的引用:

代码语言:javascript
复制
Project createOrSave(Project project)

引用,可以传递给您的json序列化程序。

javax.persistence.EntityManager#persist访问给持久性上下文的(新)实例。由于这个原因,当您创建一个新项目(使用POST方法)时,它可以工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26617567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档