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 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

我找了又找,但找不到错误。相应的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.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