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

当尝试坚持时,异常

充昌勋
2023-03-14

每当我试图将子对象持久化到JPA中现有的父对象时,就会出现以下错误:

原因:javax。验证。ConstraintViolationException:在组[javax.Validation.groups.Default]的持续时间内,类[store.entidades.Sucursal]的验证失败,约束冲突列表:[ConstraintViolationImpl]{interpolatedMessage='Por Favorite ingrese un valor en direccion',propertyPath=direccion,rootBeanClass=class store.entidades.Sucursal,messageTemplate='Por Favorite ingrese un valor en direccion'}约束行为{interpolatedMessage='Por favor Ingrease un valor en telefono',propertyPath=telefono,rootBeanClass=class store.entidades.Sucursal,messageTemplate='Por favor Ingrease un valor en telefono'}]

这是Im使用的父实体类:

    @Entity
    public class Sucursal {

        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private int id;

        // nombre del encargado de esa sucursal
        private String subgerente;

        @NotNull(message = "Por favor ingrese un valor en direccion")
        @Column(length = 120)
        private String direccion;

        @NotNull(message = "Por favor ingrese un valor en telefono")
        @Column(length = 36, unique = true)
        private String telefono;

        @OneToMany(cascade = CascadeType.MERGE, fetch = FetchType.EAGER, orphanRemoval = true)
        @JoinColumn(name = "producto_sucursal", referencedColumnName = "id")
        private List<Producto> producto = new ArrayList<Producto>();

        //getters and setters

这是Im使用的子实体类:

 @Entity
    public class Producto {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;

    @NotNull(message = "Por favor ingrese un valor")
    private String nombre;

    @NotNull(message = "Por favor ingrese un valor")
    @Column(length = 140)
    private String descripcion;

    @NotNull(message = "Por favor ingrese un valor")
    private double precio;

    @NotNull(message = "Por favor ingrese un valor")
    private String imagen1;
    @NotNull(message = "Por favor ingrese un valor")
    private String imagen2;
    @NotNull(message = "Por favor ingrese un valor")
    private String imagen3;

    private int megusta;
    private int nomegusta;

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, orphanRemoval = true)
    @JoinColumn(name = "comentario_producto", referencedColumnName = "id")
    private List<Comentario> comentario = new ArrayList<Comentario>();//

    @ManyToOne(cascade = CascadeType.MERGE, fetch = FetchType.EAGER)
    @JoinColumn(name = "producto_subcategoria")
    private Subcategoria subcategoria = new Subcategoria();

    @ManyToOne(cascade = CascadeType.MERGE, fetch = FetchType.EAGER)
    @JoinColumn(name = "producto_categoria")
    private Categoria categoria = new Categoria();

    @ManyToOne(cascade = CascadeType.MERGE, fetch = FetchType.EAGER)
    @JoinColumn(name = "producto_sucursal")
    private Sucursal sucursal = new Sucursal();

    //getters and setters

我的DAO类看起来像这样:

@Stateless
public class SucursalDAO implements Serializable {

    @Inject
    private EntityManager entityManager;

    public void save(Sucursal sucursal) {
        if (entityManager.find(Sucursal.class, sucursal.getId()) == null) {
            insertar(sucursal);

        } else {
            update(sucursal);
        }
    }

    // ...
}

每当我单击前端的“保存”按钮时,它都会调用此方法:

public void guardar() {

    System.out.println(newSucursal.getDireccion());
    System.out.println(newSucursal.getTelefono());

    for (int i = 0; i < listproductos.size(); i++) {

        // listproductos.get(i).setSucursal(newSucursal);
        System.out.println(listproductos.get(i).toString());

        newSucursal.getProductos().add(listproductos.get(i));
    }

    sucursalDAO.save(newSucursal);
}

当我调用这个保存方法时,我将新的子产品添加到我的Sucursell中,但是当我试图保存父产品时,它会给我上面发布的错误。我尝试了很多事情,但似乎无法找出问题所在?是否有另一种将子实体保存到现有父实体的方法?

编辑

这是修复我的保存方法问题的html" target="_blank">代码:

public void guardar() {

        System.out.println(newSucursal.getDireccion());
        System.out.println(newSucursal.getTelefono());

        for (int i = 0; i < listproductos.size(); i++) {

            listproductos.get(i).setSucursal(newSucursal);

            Categoria cat = new Categoria();
            cat = categoriaDAO.read(listproductos.get(i).getCategoria().getId());
            listproductos.get(i).setCategoria(cat);

            Subcategoria subcat = new Subcategoria();
            subcat = subcategoriaDAO.read(listproductos.get(i).getSubcategoria().getId());
            listproductos.get(i).setSubcategoria(subcat);

            System.out.println(listproductos.get(i).toString());

            newSucursal.getProductos().add(listproductos.get(i));
        }

        // newSucursal.setProductos(listproductos);

        sucursalDAO.save(newSucursal);
    }

共有1个答案

楚瑞
2023-03-14

问题的关键是你需要分配双方的关系:

public void guardar() {

    System.out.println(newSucursal.getDireccion());
    System.out.println(newSucursal.getTelefono());

    for (int i = 0; i < listproductos.size(); i++) {

        listproductos.get(i).setSucursal(newSucursal);
        System.out.println(listproductos.get(i).toString());

        newSucursal.getProductos().add(listproductos.get(i));
    }

    sucursalDAO.save(newSucursal);
}

由于某种原因,您已经将其注释掉了。

此外,您的所有@ManyToOne关系都使用新对象初始化,例如:

@ManyToOne(cascade = CascadeType.MERGE, fetch = FetchType.EAGER)
@JoinColumn(name = "producto_subcategoria")
private Subcategoria subcategoria = new Subcategoria();

这是自找麻烦,因为(再一次)这些关系的反面从未设定。

 类似资料:
  • 我有一个spark jar,我正试图将其提交给我的本地spark实例。jar是这样的包:按照maven结构,所有配置文件都存在于/resources文件夹中。 以下是例外情况: 在上述异常中,可以观察到的一件事是<代码> 在jar末尾标记:

  • 我试图上传多次照片到一个产品,但它不工作,这个例外是: 堆栈跟踪(纯文本): [1]条理\orm\ormException:在关联上找到类型为条理\common\collections\arrayCollection..\entity\product#photos的实体,但在C:..\vendor\dection\orm\lib\dection\orm\unitofwork.php第791行中需要

  • 我在尝试从SOAPUI调用服务时遇到以下异常。当我在浏览器中打开endpoint时,它会显示wsdl fine。 我的wsdl在was 7服务器中 我在中的Soap请求: 肥皂UI中的肥皂反应: 这就是我配置jaxws:endpoint的方式

  • 我正在尝试将文件上传到 Azure Blob 存储,但在将文件推送到存储中时收到错误。 我使用java 11和Quarkus进行开发。在POM上,我添加了工件azure-storage-blob和azure-sdk-bom 法典: 恢复错误 io.net.cha.DefaultChannelPipeline] (vert.x-eventloop-thread-2) 一个 exceptionCaug

  • 我已经设置了独立于Symfony框架的Doctrine和Symfony表单(因为我不需要大部分)。 我遇到的问题是,当试图坚持一个新的“审计”时,它有一个“类型”原则,似乎想坚持关系的拥有方(类型)。 例如,审计可能具有车辆服务的类型。 然后在反面: 持久性代码如下所示: 最后,form类是: 所有这些看起来(至少对我来说)与所有文档中的条令和符号都完全一样,但我发现了一个错误: 通过关系“Mod

  • 我试图连接,以便在Derby中为一个类项目创建db,但遇到了以下问题:我从Derby官方网站下载了zip文件,目前我使用的是10.12.1.1版本,我已经执行了startNetwork命令,它向我显示了一个日志文件,该文件表示已准备好接受端口1527上的连接,但当我尝试使用该命令连接时(在ij中):connect