【发布时间】:2015-01-15 17:28:21
【问题描述】:
我在 Spring MVC 服务器中有 2 个 JPA 实体。其中一个是“父母”,另一个是孩子。 当我读到here(原因4)时,当我有一个父实体和子实体时,首先必须删除父实体,然后再删除子实体。它正在制作 org.hibernate.exception.ConstraintViolationException
父实体项目
@Entity public class Project { @Id @GeneratedValue(strategy=GenerationType.AUTO) @JsonIgnore private long id; private String project_name; private Date date; private String nome_classe; @ElementCollection(fetch=FetchType.EAGER) List<respostas> Listarespostas = new ArrayList<respostas>(); //CHILD !!!! public Project() {} //gets and sets }
子实体回复
@Entity public class respostas { @Id @GeneratedValue(strategy=GenerationType.AUTO) @JsonIgnore private long id; @ElementCollection(fetch=FetchType.EAGER) List<String> lista = new ArrayList<String>(); String respostasjson; public respostas() {} public respostas(List<String> lista) { this.lista = lista; Gson gson = new Gson(); gson.toJson(lista); } public void addResposta(String resposta) { lista.add(resposta); } public void removeResposta(int i) { lista.remove(i); } public String getRespostasjson() { return respostasjson; } public void setRespostasjson(String respostasjson) { this.respostasjson = respostasjson; } public List<String> getLista() { return lista; } }
我尝试在 Controller
中的“@RequestMapping(value = "delete")”中删除它们@RequestMapping(value = "delete", method = RequestMethod.GET) public ModelAndView DeletePostoSaude(Principal p,HttpServletResponse response) { if(p.getName().equals("coursera")) { Projects.deleteAll(); respostas.deleteAll(); } }
但 ConstraintViolationException 仍然出现:
休眠:从项目 project0_ 中选择 project0_.id 作为 id1_5_、project0_.date 作为 date2_5_、project0_.listaperguntasjson 作为 listaper3_5_、project0_.listarespostasjson 作为 listares4_5_、project0_.nome_classe 作为 nome_cla5_5_、project0_.project_name 作为 project_6_5_ 休眠:从 Project_Listaperguntas 中删除 Project_id=? 休眠:从项目中删除 id=? 2014-11-18 10:29:26.599 WARN 980 --- [nio-8080-exec-2] o.h.engine.jdbc.spi.SqlExceptionHelper:SQL 错误:23503,SQLState:23503 2014-11-18 10:29:26.599 错误 980 --- [nio-8080-exec-2] ohengine.jdbc.spi.SqlExceptionHelper: Violación de una restrictción de Integridad Reference: "FK_547Q6QW5LUAR2Q292SPD53J5G: PUBLIC.PROJECT_LISTARESPOSTAS FOREIGN KEY PROJECT_ID) 参考 PUBLIC.PROJECT(ID) (193)" 参照完整性约束违规:“FK_547Q6QW5LUAR2Q292SPD53J5G:PUBLIC.PROJECT_LISTARESPOSTAS FOREIGN KEY(PROJECT_ID) REFERENCES PUBLIC.PROJECT(ID) (193)”; SQL 语句: 从 id=? 的项目中删除[23503-175] 2014-11-18 10:29:26.599 INFO 980 --- [nio-8080-exec-2] o.h.e.j.b.internal.AbstractBatchImpl:HHH000010:在批处理发布时,它仍然包含 JDBC 语句 2014-11-18 10:29:26.601 错误 980 --- [nio-8080-exec-2] oaccC[.[.[/].[dispatcherServlet]:Servlet.service() 用于 servlet [dispatcherServlet] path [] 抛出异常 [请求处理失败;嵌套异常是 org.springframework.dao.DataIntegrityViolationException:无法执行语句; SQL [不适用];约束 ["FK_547Q6QW5LUAR2Q292SPD53J5G: PUBLIC.PROJECT_LISTARESPOSTAS FOREIGN KEY(PROJECT_ID) REFERENCES PUBLIC.PROJECT(ID) (193)"; SQL 语句: 从 id=? 的项目中删除[23503-175]];嵌套异常是 org.hibernate.exception.ConstraintViolationException: could not execute statement] 根本原因 org.h2.jdbc.JdbcSQLException: Violación de una restrictción de Integridad Reference: "FK_547Q6QW5LUAR2Q292SPD53J5G: PUBLIC.PROJECT_LISTARESPOSTAS FOREIGN KEY(PROJECT_ID) REFERENCES PUBLIC.PROJECT(ID) (193)" 参照完整性约束违规:“FK_547Q6QW5LUAR2Q292SPD53J5G:PUBLIC.PROJECT_LISTARESPOSTAS FOREIGN KEY(PROJECT_ID) REFERENCES PUBLIC.PROJECT(ID) (193)”; SQL 语句: 从 id=? 的项目中删除[23503-175]
有什么解决办法吗? (每个实体都有自己的 CrudRepository)
【问题讨论】:
标签: spring hibernate jpa entity