每当我试图将子对象持久化到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);
}
问题的关键是你需要分配双方的关系:
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行中需要
我试图连接,以便在Derby中为一个类项目创建db,但遇到了以下问题:我从Derby官方网站下载了zip文件,目前我使用的是10.12.1.1版本,我已经执行了startNetwork命令,它向我显示了一个日志文件,该文件表示已准备好接受端口1527上的连接,但当我尝试使用该命令连接时(在ij中):connect
我在尝试从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