当前位置: 首页 > 知识库问答 >
问题:

在Spring MVC上删除子实体和父实体会导致ConstraintViolationException

李博达
2023-03-14

我在Spring MVC服务器中有2个JPA实体。其中一个是“父母”,另一个是孩子。正如我在这里读到的(原因4),当我有父实体和子实体时,首先必须删除父实体,然后删除子实体。它正在制作一个组织。冬眠例外约束ViolationException

父实体项目

@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;
}
}

我尝试在我的控制器中的“@Request estMap(value="ete")”中删除它们

 @RequestMapping(value = "delete", method = RequestMethod.GET)
public ModelAndView DeletePostoSaude(Principal p,HttpServletResponse response) 
{
    if(p.getName().equals("coursera"))
    {
        Projects.deleteAll();
        respostas.deleteAll();
    }
}

但ConstraintViolationException仍然出现:

有什么解决方案吗?(每个实体都有其CRUDREPOSITY)

共有1个答案

狄誉
2023-03-14

从这个错误来看,您的表似乎是反方向工作的。我看到一个项目列表正在引用该项目。尝试按相反顺序删除:

respostas.deleteAll();
Projects.deleteAll();

您可能还希望选中“删除级联”选项,以便在删除实体时,也会删除引用实体。这可能很简单,只需在引用另一个表的列上放置注释(action=OnDeleteAction.CASCADE)(有关更多信息,请查看spring jpa文档)

 类似资料:
  • 我的实体。ValidationStep与documentDetail有一对一的关系,documentDetail与documentValidations有一个完全的关系 我的删除查询 父ValidationStep被删除,但是docDetail和documentValidations仍然在数据库中。

  • 删除父实体时,我还想删除关联的子实体(从数据库中)。我试图在删除时使用级联,如下所示,但我一定做错了什么。 当对父实体对象调用删除时,我收到错误消息:“该实体仍在数据库的其他地方引用”。我可以确认该实体在数据库的其他地方引用的唯一地方是在下面的两个表中(如果我手动从数据库中删除子行,对父实体对象的删除调用工作正常)。在过去的9个小时里,我一直在阅读实体对象并尝试不同的东西。我做错了什么? 这是我的

  • 我的实体更新有问题。如你所见,我有三个实体。 包含类中的列表。 包含类中的列表。 从我的SQL语句中可以看到,字段和是唯一的。我的表中只允许该组合的一行。 当我用类的新列表更新父实体()时,我希望Hibernate删除旧列表本身并创建新实体。一个一个地更新孩子是有点困难的。这就是为什么我要直接删除所有相关的孩子。 当我更新并为其提供包含具有唯一名称的和(数据库中已存在的实体)组合的列表时,我会出现

  • 问题内容: 我有两个分别以双向一对多关系存在的实体类 A 和 B。 A.java: B.java 在一个简单的控制台应用程序中,我从数据库中获取了特定的 A 行,并尝试删除其详细信息 B 行(随机),但是 JPA / Hibernate* 不仅删除了该行-甚至没有向该行发出任何 DELETE 语句。数据库。删除 B 行的唯一方法是从 A.java 的集合( LinkedHashSet )中删除相应

  • 我用的是SpringBoot和JPA Hibernate。 我有这些实体: 当我尝试删除父实体(Post)时,所有相关实体注释都保留在数据库中。为什么级联删除不起作用?

  • 我正在尝试删除一个父/子自连接实体,但无法这样做,这里是我的映射