Spring Boot Web MVC JPA使用CrudrePository使用保存方法抛出EntityExistSe



在Crud操作中创建的错误是" 的错误",具有相同标识符值的不同对象已经与会话 "休息所有(读取,更新和删除))工作正常。

IM使用Oracle SQL作为数据库,还有一个具有类别类别的产品的产品实体。 EntityClass

@Entity
public class Categories {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;
    private String name;
    public Categories() {
        super();
    }
    public Categories(Integer id,String name) {
        this.id=id;
        this.name=name;
    }
    public Categories(String name) {
        this.name=name;
    }
//with setters and getters
}

JSP页面

<body onload="document.getElementById('name').disabled = true;document.getElementById('hidden').disabled = true;">
    <div align="center">
        <h4>Add or Modify or Delete Categories</h4>
        <form:form method="POST" action="/categories" modelAttribute="categories">
            <table>
                <tr>
                    <td><form:label path="name">Name</form:label></td>
                    <td>
                        <form:select path="name">
                            <form:option value="NONE" label="Select" />
                            <form:options items="${categoriesList}" />
                        </form:select>
                    </td>   
                </tr>
                <tr>
                    <td>Operations</td>
                    <td>
                        <input type="radio" name="Ops" value="Add" checked="checked" onclick="document.getElementById('name').disabled = true; document.getElementById('newName').disabled = false;document.getElementById('hidden').disabled = true;">Add</input><br/>
                        <input type="radio" name="Ops" value="Modify"  onclick="document.getElementById('name').disabled = false; document.getElementById('newName').disabled = false;document.getElementById('hidden').disabled = true;">Modify</input><br/>
                        <input type="radio" name="Ops" value="Delete"  onclick="document.getElementById('name').disabled = false; document.getElementById('newName').disabled = true;document.getElementById('hidden').disabled = false;">Delete</input><br/>                   
                    </td>
                </tr>
                <tr>
                    <td>Name</td>
                    <td><input type="text" name="newName" id="newName"/>
                        <input type="hidden" id="hidden" name="newName" value="dummy"/>
                    </td>
                </tr>
                <tr>
                    <td colspan="2"><input type="submit" value="Submit" /></td>
                </tr>
            </table>
        </form:form>
    </div>
</body>

控制器类

    @Controller
public class CategoriesController {
    @Autowired
    private CategoriesService cservice;
    @RequestMapping(value = "/categories", method = RequestMethod.GET)
    public ModelAndView categories() {
        // view name  model 
        ModelAndView modelAndView = new ModelAndView("categories", "categories", new Categories());
        return modelAndView;
    }
    @RequestMapping(value = "/categories", method = RequestMethod.POST)
    public String  opsOnCategories(@ModelAttribute("categories") Categories cat,@RequestParam("Ops") String ops,@RequestParam("newName") String name) 
    {
        if(ops.equals("Modify"))
        {
            cservice.modifyCategory(new Categories(Integer.parseInt(cat.getName()), name));
        }else if(ops.equals("Add"))
        {
            cservice.addCategory(new Categories(name));
        }else 
        {
            cservice.deleteCategory(Integer.parseInt(cat.getName()));
        }
        return "categories";
    }

    @ModelAttribute("categoriesList")
       public Map<String, String> getCategoryList() {
          Map<String, String> categoriesList = new HashMap<String, String>();
          List<Categories> ls=cservice.getAll();
          for(int i=0;i<ls.size();i++)
          {
              categoriesList.put(ls.get(i).getId().toString(), ls.get(i).getName());
          }
          return categoriesList;
       }
}

任何人都可以为此提供帮助。

上一个错误

insert into CATEGORIES(ID,NAME) values (1,'Mobile');
insert into CATEGORIES(ID,NAME) values (2,'Laptop');

**进行删除错误的更改*

insert into CATEGORIES(ID,NAME) values (hibernate_sequence.nextval,'Mobile');
insert into CATEGORIES(ID,NAME) values (hibernate_sequence.nextval,'Laptop');

我最初的猜测是,@id @ID @ID @generatedValue专门使用Oracle数据库。

您可以做几件事:

1-尝试仅连接到任何其他数据库类型以测试功能 - 以便您可以排除无关紧要的内容

2-尝试使用 @org.springframework.data.annotation.id与javax persistence

一起使用

看起来像这样的东西

@Id
@org.springframework.data.annotation.Id
private Integer id;

3-创建一个生成随机整数ID的类,并使用注释(@genericgenerator&amp; @generatedValue)

参考它。

最新更新