java - Spring JPA可以修改实体但不能创建

标签 java spring spring-mvc jpa

我的 Spring JPA 项目中有一个奇怪的问题,它阻止我创建新用户,但我可以修改现有用户。我正在为我的方法实现 Spring JPA 的 CrudRepository

  • 我的表格中有 200 个现有用户
  • 我可以使用 SQL 脚本手动创建

如果通过表单创建的用户没有 ID,我会手动为其分配一个 ID - 只是为了测试

类别

@Entity(name="User")
public class User {
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="Id", nullable = false)
    private Long id;

    @Column(name="name")
    private String name;

    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

    public User(){}

表格(百里香叶)

<form th:action="@{/saveUser}" th:object="${user}" method="post">
    <p>Name: <input type="text" th:field="*{name}" /></p>
    <p>ID: <input type="hidden" th:field="*{id}" /></p>
</form>

Controller

@RequestMapping(value = "/saveUser", produces = "text/html", method = RequestMethod.POST)
public ModelAndView saveUser(
        @ModelAttribute("user") User user, 
        @RequestParam("id", required = false) Long Id, 
        Model model) {
    try {
        if(user.getId() == null || user.getId() == 0){
            user.setId(40000) //arbitrary ID
        }
        userRepo.save(user);
    } catch(Exception e){
        logger.error("Error saving user" + e.getMessage());
    }
    return getUserForm(user.getId());   
}

但是我在保存时遇到错误

Cannot insert the value NULL into column 'Id', table 'dbo.User'; column does not allow nulls. INSERT fails

我可以看到在推送到保存方法时确实设置了用户 ID - 这里有什么我可以忽略的吗?

最佳答案

代码中有两处可疑之处:

  1. 取出实体类中定义的公共(public)构造函数。 (如果我是对的,JPA规范不推荐)

  2. 如果实际上未按表中的方式定义“@GenerateValue(strategy=GenerationType.IDENTITY)”行,则从实体类中取出该行。

祝你好运,克莱!!!

关于java - Spring JPA可以修改实体但不能创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35178379/

相关文章:

Java - Android Mobile Vision人脸检测与轮廓

java - 在 Spring 中将字符串数组注入(inject) bean

java - 尝试实现 AWS SDK 时出现异常

java - Spring MVC 中@RequestMapping produces 属性的一些信息

postgresql - Spring JDBC - 最后插入的 id

java - JOGL 2.0 不支持 GLCanvas ,Texture ,Animator ,但是 jogl 1.0 呢?

java - 如何使用 Spring Integration 处理来自 AWS SQS FiFo 队列的超过 10 个并发消息

java - 部署在 Tomcat 上的 Spring Boot Rest API 提供 404,但独立运行一切正常

java - 如何在Spring MVC测试框架中测试配置静态资源

java - 如何在传统的spring mvc应用程序中添加请求超时或连接超时来防止“''慢http post漏洞”?