相关疑难解决方法(0)

是否可以使用带有JPA的Spring MVC仅更新实体上的属性子集?

我正在使用Spring Roo,使用Spring MVC和JPA来持久化MySQL数据库.我对Spring MVC和Java非常陌生,但是我一直在使用CakePHP和Rails.

User除了密码之外,我还有一个包含个人详细信息的实体.这样的事情(在其他.aj文件中排除了很多Roo生成的功能):

public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "ID")
    private Long id;

    @Column(name = "PASSWORD", length = 32)
    private String password;

    @Column(name = "FIRST_NAME", length = 25)
    private String firstName;

    @Column(name = "LAST_NAME", length = 25)
    private String lastName;

    @Column(name = "ADDRESS", length = 255)
    private String address;

    // The appropriate getters and setters
    ...
}
Run Code Online (Sandbox Code Playgroud)

然后我在我的User控制器中有一个编辑动作,我根据Roo自动生成的脚手架创建了以下约定:

@RequestMapping(value="/edit", method = RequestMethod.GET)
public String editForm(Model uiModel) {
    String username = (String) …
Run Code Online (Sandbox Code Playgroud)

java spring hibernate jpa spring-roo

16
推荐指数
2
解决办法
2万
查看次数

Spring 3 AJAX POST请求与@RequestBody以及@ModelAttribute和@SessionAttribute一起使用?

有一个Java spring MVC web应用程序,并正在发出jquery ajax post请求.我的控制器设置为接收和发送json数据.一切正常,JSON字符串格式良好,Controller可以创建并填充Command对象,并使用JSON请求数据的内容填充它.但是,我正在更新Contact对象的数据,而我的JSP表单元素仅包含数据库更新所需的所有数据的子集.在我对具有表单的JSP页面的初始GET请求中,我从数据库中检索所有必需的数据,填充Contact Command对象,然后将该命令对象绑定到Model.

如果我正在进行正常的POST提交表单提交,我相信只是将我的命令对象声明为@SessionAttribute,并在我的onSubmit()POST方法中使用@ModelAttribute引用该Command对象就足够了.Spring将从我的会话中检索已填充的命令对象,然后绑定(覆盖)由于POST请求而更改的那些值.然后,可以将此更新的命令对象用作DB更新的参数.

但是,我正在使用Spring 3并利用@RequestBody参数类型.我无法让Spring给我会话对象并自动绑定请求中的新值.它或者只提供旧的会话命令对象(不应用更改)或仅提供POST请求中的值的新命令对象.

这是一个小代码 - 不起作用:

@SessionAttributes("contactCommand")
@Controller
public class ContactController {


  @RequestMapping(value = "/editContact", method=RequestMethod.GET)
public String init(ModelMap model, Locale locale, HttpServletRequest request, HttpServletResponse response) throws GeneralException {
    final ContactCommand cmd = new ContactCommand();
    // populate with data from DB etc
    model.addAttribute("contactCommand", cmd);
    // etc
}

@RequestMapping(value="/editContact",method=RequestMethod.POST, consumes = "application/json", produces = "application/json")
public @ResponseBody Map<String, ? extends Object> editContactInfo(@RequestBody @ModelAttribute("contactCommand") ContactCommand cmd, HttpServletRequest request, HttpServletResponse response) throws GeneralException {

// do …
Run Code Online (Sandbox Code Playgroud)

java ajax json controller spring-mvc

6
推荐指数
1
解决办法
7676
查看次数

使用 Morphia 及其 BasicDAO 更新实体

我使用 SpringBoot Web 和 Morphia DAO(以使用 MongoDB)创建一个 REST Web 服务。

正如我在 MySQL 上使用 Hibernate 时所做的那样,我想使用通用实体、存储库和端点,这样我只需设置实体、继承存储库和服务,并通过 REST 调用使用生成的 CRUD。

快完成了,但我在使用 Morphia 进行实体的通用更新时遇到了问题。到目前为止,我所看到的所有内容都涉及手动设置带有必须更改的字段的请求;但在 Hibernate 方式中,我们只需设置 Id 字段,调用 persist(),它就会自动知道发生了什么变化并在数据库中应用更改。

这是一些代码。

基础实体.java

package org.beep.server.entity;

import org.mongodb.morphia.annotations.Entity;

@Entity
abstract public class BaseEntity {
    public static class JsonViewContext {
        public interface Summary {}
        public interface Detailed extends Summary{}
    }

    protected String id;

    public void setId(String id) {
        this.id = id;
    }
}
Run Code Online (Sandbox Code Playgroud)

User.java(我的最终实体之一)

package org.beep.server.entity;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonView;
import lombok.*;
import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.NotEmpty; …
Run Code Online (Sandbox Code Playgroud)

java rest morphia spring-boot

5
推荐指数
1
解决办法
2946
查看次数

标签 统计

java ×3

ajax ×1

controller ×1

hibernate ×1

jpa ×1

json ×1

morphia ×1

rest ×1

spring ×1

spring-boot ×1

spring-mvc ×1

spring-roo ×1