Java n在未设置idInventario字段的情况下 if(!(Inventario的对象实例)){ 返回false; } Inventario other=(Inventario)对象; 回来!((this.idiventario==null&&other.idiventario!=null)| |(this.idiventario!=null&&other.idiventario.equals(other.idiventario))); } @凌驾 公共字符串toString(){ return“Models.Inventario[id=“+idiventario+”]”; } }
我找了又找,但找不到错误。相应的StackTrace如下所示:Java n在未设置idInventario字段的情况下 if(!(Inventario的对象实例)){ 返回false; } Inventario other=(Inventario)对象; 回来!((this.idiventario==null&&other.idiventario!=null)| |(this.idiventario!=null&&other.idiventario.equals(other.idiventario))); } @凌驾 公共字符串toString(){ return“Models.Inventario[id=“+idiventario+”]”; } },java,jpa,eclipselink,Java,Jpa,Eclipselink,我找了又找,但找不到错误。相应的StackTrace如下所示: Exception in thread "main" java.lang.IllegalArgumentException: Object: Models.Inventario[ id=null ] is not a known entity type. at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerNewObjectForPersis
Exception in thread "main" java.lang.IllegalArgumentException: Object: Models.Inventario[ id=null ] is not a known entity type.
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerNewObjectForPersist(UnitOfWorkImpl.java:4228)
at org.eclipse.persistence.internal.jpa.EntityManagerImpl.persist(EntityManagerImpl.java:496)
at Models.Inventario.save(Inventario.java:155)
at Models.Inventario.<init>(Inventario.java:81)
at javaapplication3.JavaApplication3.main(JavaApplication3.java:36)
Java Result: 1
线程“main”java.lang.IllegalArgumentException中的异常:对象:模型。Inventario[id=null]不是已知的实体类型。
位于org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerNewObjectForPersist(UnitOfWorkImpl.java:4228)
位于org.eclipse.persistence.internal.jpa.EntityManagerImpl.persist(EntityManagerImpl.java:496)
位于Models.Inventario.save(Inventario.java:155)
在Models.Inventario.(Inventario.java:81)
位于javaapplication3.javaapplication3.main(javaapplication3.java:36)
Java结果:1
请问,我的错误是什么?也共享数据库表架构。那是什么
EM
,它来自哪里?打开日志记录,查看加载了什么。您正在使用的持久化单元很可能在第一次加载时的类路径中没有Models.Inventario。
package Models;
import java.io.Serializable;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.TableGenerator;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;
/**
*
* @author Michel Betancourt
* @version 1.0
*/
@Entity
@Table(name = "Inventario", catalog = "", schema = "")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "Inventario.findAll", query = "SELECT i FROM Producto i"),
@NamedQuery(name = "Inventario.findByProducto", query = "SELECT i FROM Inventario i WHERE i.idInventario = :idInventario")})
public class Inventario implements Serializable, Conexion {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(generator = "sqlite_inventario")
@TableGenerator(name = "sqlite_inventario", table = "sqlite_sequence",
pkColumnName = "name", valueColumnName = "seq",
pkColumnValue = "sqlite_inventario",
initialValue = 0, allocationSize = 1)
@Column(name = "idInventario")
private Integer idInventario;
@Basic(optional = false)
@Column(name = "stockInventario")
private Integer stock;
@OneToMany(mappedBy = "inventario")
private List<Producto> productos;
//----------------------------------------------------------------------------------------------------------------//
// Constructores
//----------------------------------------------------------------------------------------------------------------//
/**
* Constructor por defecto.
*/
public Inventario() {
}
/**
* Crea un inventario.
* @param stock Cantidad de productos
*/
public Inventario(Integer stock) {
this.stock = stock;
save();
}
//----------------------------------------------------------------------------------------------------------------//
// Metodos estaticos
//----------------------------------------------------------------------------------------------------------------//
/**
* Busca todos los inventarios.
* @return List con todos los inventarios.
*/
public static List<Inventario> findAll(){
return EM.createNamedQuery("Inventario.findAll").getResultList();
}
/**
* Todos los productos existentes.
* @return cantidad de productos en almacenes.
*/
public static int countStock(){
List<Inventario> inventarios = findAll();
int total = 0;
return inventarios.stream().map((next) -> next.stock).reduce(total, Integer::sum);
}
//----------------------------------------------------------------------------------------------------------------//
// Metodos
//----------------------------------------------------------------------------------------------------------------//
/**
* Agrega nuevos productos al inventario.
* @param cantidad Cuanto se va a agregar
* @return True: Si se agrega con éxito. False: Si no hay capacidad.
*/
public boolean addStock(int cantidad){
int total = countStock();
if(total + cantidad <= Config.getCapacidadStock()){
stock += cantidad;
save();
return true;
}
return false;
}
/**
* Quita productos del inventario.
* @param cantidad Cuanto se va a quitar.
* @return True: Si se quitan con éxito. False: Si se trata de eliminar mas de el stock actual.
*/
public boolean remStock(int cantidad){
if(stock - cantidad >= 0){
stock -= cantidad;
save();
return true;
}
return false;
}
//----------------------------------------------------------------------------------------------------------------//
// Metodos de guardar y borrar
//----------------------------------------------------------------------------------------------------------------//
/**
* Elimina una compra de la base de datos.
*/
public void delete(){
EM.getTransaction().begin();
EM.remove(this);
EM.getTransaction().commit();
}
/**
* Guarda el objeto en la base de datos.
*/
private void save(){
EM.getTransaction().begin();
EM.persist(this);
EM.flush();
EM.getTransaction().commit();
}
//----------------------------------------------------------------------------------------------------------------//
// Getters and Setters
//----------------------------------------------------------------------------------------------------------------//
public Integer getIdInventario() {
return idInventario;
}
public void setIdInventario(Integer idInventario) {
this.idInventario = idInventario;
}
public Integer getStock() {
return stock;
}
public void setStock(Integer stock) {
this.stock = stock;
}
@XmlTransient
public List<Producto> getProductos() {
return productos;
}
public void setProductos(List<Producto> productos) {
this.productos = productos;
}
//----------------------------------------------------------------------------------------------------------------//
// Sobre escritura de metodos
//----------------------------------------------------------------------------------------------------------------//
@Override
public int hashCode() {
int hash = 0;
hash += (idInventario != null ? idInventario.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the idInventario fields are not set
if (!(object instanceof Inventario)) {
return false;
}
Inventario other = (Inventario) object;
return !((this.idInventario == null && other.idInventario != null) || (this.idInventario != null && !this.idInventario.equals(other.idInventario)));
}
@Override
public String toString() {
return "Models.Inventario[ id=" + idInventario + " ]";
}
}
Exception in thread "main" java.lang.IllegalArgumentException: Object: Models.Inventario[ id=null ] is not a known entity type.
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerNewObjectForPersist(UnitOfWorkImpl.java:4228)
at org.eclipse.persistence.internal.jpa.EntityManagerImpl.persist(EntityManagerImpl.java:496)
at Models.Inventario.save(Inventario.java:155)
at Models.Inventario.<init>(Inventario.java:81)
at javaapplication3.JavaApplication3.main(JavaApplication3.java:36)
Java Result: 1