Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 问题JPA/Hibernate_Java_Sql Server_Spring_Hibernate - Fatal编程技术网

Java 问题JPA/Hibernate

Java 问题JPA/Hibernate,java,sql-server,spring,hibernate,Java,Sql Server,Spring,Hibernate,我试图通过JPA/Hibernate和SQL Server更好地理解注释 我创建了一个简单的项目:一个名为“Articles”的抽象类。两个类继承了它:Ramete增加了一个权重,Pen增加了一个颜色。下面的代码无效,我无法更正错误。你有什么想法吗?谢谢大家! package fr.eni.hibernate.entities; import java.io.Serializable; import javax.persistence.Column; import javax.persi

我试图通过JPA/Hibernate和SQL Server更好地理解注释

我创建了一个简单的项目:一个名为“Articles”的抽象类。两个类继承了它:Ramete增加了一个权重,Pen增加了一个颜色。下面的代码无效,我无法更正错误。你有什么想法吗?谢谢大家!

package fr.eni.hibernate.entities;
 
import java.io.Serializable;
 
import javax.persistence.Column;
import javax.persistence.DiscriminatorColumn;
import javax.persistence.DiscriminatorType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.Table;
 
@Entity
@Table(name = "Articles")
@Inheritance( strategy = InheritanceType.SINGLE_TABLE )
@DiscriminatorColumn( name="type", discriminatorType = DiscriminatorType.STRING)
public abstract class Articles implements Serializable {
 
    private static final long serialVersionUID = 1L;
 
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "idarticle")
    private Integer idarticle;
    @Column(name = "reference")
    private String reference;
    @Column(name = "marque")
    private String marque ;
    @Column(name = "designation")
    private String designation;
    @Column(name = "prixUnitaire")
    private float prixUnitaire ;
    @Column(name = "qteStock")
    private int qteStock ;
 
    public Articles() {
    }
 
 
 
    public Integer getIdArticle() {
        return idarticle;
    }
 
    public String getReference() {
        return reference;
    }
 
    public void setReference(String reference) {
        this.reference = reference;
    }
 
    public String getMarque() {
        return marque;
    }
 
    public void setMarque(String marque) {
        this.marque = marque;
    }
 
    public String getDesignation() {
        return designation;
    }
 
    public void setDesignation(String designation) {
        this.designation = designation;
    }
 
    public float getPrixUnitaire() {
        return prixUnitaire;
    }
 
    public void setPrixUnitaire(float prixUnitaire) {
        this.prixUnitaire = prixUnitaire;
    }
 
    public int getQteStock() {
        return qteStock;
    }
 
    public void setQteStock(int qteStock) {
        this.qteStock = qteStock;
    }
 
    @Override
    public String toString() {
        return "Article [idArticle=" + idarticle + ", reference=" + reference + ", marque=" + marque + ", designation="
                + designation + ", prixUnitaire=" + prixUnitaire + ", qteStock=" + qteStock + "]";
    }
 
}


线程“main”javax.persistence.PersistenceException:org.hibernate.ErrorClassException:Object[id=5]中的异常不属于指定的子类[fr.eni.hibernate.entities.Articles]:鉴别器:Ramette

位于org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:154) 位于org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1542) 位于org.hibernate.query.query.getResultList(query.java:165) 位于fr.eni.hibernate.entities.Main.Main(Main.java:22) 原因:org.hibernate.ErrorClassException:对象[id=5]不属于指定的子类[fr.eni.hibernate.entities.Articles]:鉴别器:Ramette
位于org.hibernate.loader.loader.getInstanceClass(loader.java:1945) 位于org.hibernate.loader.loader.instanceNotYetLoaded(loader.java:1726) 位于org.hibernate.loader.loader.getRow(loader.java:1623) 位于org.hibernate.loader.loader.getRowFromResultSet(loader.java:740) 位于org.hibernate.loader.loader.getRowsFromResultSet(loader.java:1039) 位于org.hibernate.loader.loader.processResultSet(loader.java:990) 位于org.hibernate.loader.loader.doQuery(loader.java:959) 在org.hibernate.loader.loader.doQueryAndInitializeNonLazyCollections(loader.java:349)上 位于org.hibernate.loader.loader.doList(loader.java:2850) 位于org.hibernate.loader.loader.doList(loader.java:2832) 位于org.hibernate.loader.loader.listIgnoreQueryCache(loader.java:2664) 位于org.hibernate.loader.loader.list(loader.java:2659) 位于org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:506) 位于org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:400) 位于org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:219) 位于org.hibernate.internal.SessionImpl.list(SessionImpl.java:1414) 位于org.hibernate.query.internal.AbstractProducedQuery.doList(AbstractProducedQuery.java:1565) 位于org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1533) ... 还有两个


这没有多大意义。只有当表中的鉴别器与实体模型中的鉴别器不匹配时,才会引发此异常。表中可能有尾随空格?

如果需要帮助,您确实需要发布异常的堆栈跟踪或收到的错误消息。完成了,谢谢you@nathaliej请您同时出示
Ramette
实体好吗?@SternK很好谢谢您的留言。我认为问题在于抽象类,因为如果我将Articles类更改为具体类,一切似乎都正常。但我不知道如何解决这个问题。我的表中没有空格。我可能错了,但异常显示为
Discriminator:Ramette
。看到后面的空白了吗?尝试通过执行
select*from Articles where trim(type)type
检查尾部空白。此查询不会返回错误。我的表中没有空格。查询不会返回错误,但会返回带有尾随空格的行列表。当我执行请求时,不会显示任何行
package fr.eni.hibernate.entities;
 
import javax.persistence.Column;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
 
@Entity
@DiscriminatorValue("Ramette")
public class Ramette extends Articles {
 
 
    private static final long serialVersionUID = 1L;
    private int grammage;
 
    public Ramette() {
 
    }
 
 
 
    @Column(name = "grammage")
    public int getGrammage() {
        return grammage;
    }
 
    public void setGrammage(int grammage) {
        this.grammage = grammage;
    }
 
    @Override
    public String toString() {
        return super.toString() + " Ramette [grammage=" + grammage + "]";
    }
 
}


package fr.eni.hibernate.entities;
 
import javax.persistence.Column;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
 
@Entity
@DiscriminatorValue("Stylo")
public class Stylo extends Articles {
 
 
    private static final long serialVersionUID = 1L;
    private String couleur;
 
    public Stylo() {
 
    }
 
 
 
    @Column(name = "couleur")
    public String getCouleur() {
        return couleur;
    }
 
    public void setCouleur(String couleur) {
        this.couleur = couleur;
    }
 
    @Override
    public String toString() {
        return super.toString() + " Stylo [couleur=" + couleur + "]";
    }
 
}


package fr.eni.hibernate.entities;
 
import java.util.List;
 
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.TypedQuery;
 
public class Main {
 
    public static void main(String[] args) throws Exception {
 
        EntityManagerFactory entityManagerFactory = null;
        EntityManager entityManager = null;
        try {
            entityManagerFactory = Persistence.createEntityManagerFactory("WebStore");
            entityManager = entityManagerFactory.createEntityManager();
 
            TypedQuery<Articles> query = entityManager.createQuery("from Articles", Articles.class);
            List<Articles> art = query.getResultList();
            for (Articles article : art) {
                System.out.println(art.getClass().getName());
                System.out.println("\t" + article);
            }
 
        } finally {
            if (entityManager != null)
                entityManager.close();
            if (entityManagerFactory != null)
                entityManagerFactory.close();
        }
    }
}


<persistence xmlns="http://java.sun.com/xml/ns/persistence"
    xmlns<img src="images/smilies/icon_mad.gif" border="0" alt="" title=":x" class="inlineimg" />si="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence 
                   http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
    version="2.0">
 
    <persistence-unit name="WebStore">
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
 
        <class>fr.eni.hibernate.entities.Articles</class>
                <class>fr.eni.hibernate.entities.Stylo</class>
                <class>fr.eni.hibernate.entities.Ramette</class>
 
 
        <properties>
            <property name="javax.persistence.jdbc.driver"
                value="com.microsoft.sqlserver.jdbc.SQLServerDriver" />
            <property name="javax.persistence.jdbc.url"
                value="jdbc:sqlserver://localhost;database=PAPETERIE_TEST" />
            <property name="javax.persistence.jdbc.user" value="xx" />
            <property name="javax.persistence.jdbc.password" value="x" />
 
            <property name="hibernate.dialect"
                value="org.hibernate.dialect.SQLServerDialect" />
            <property name="hibernate.format_sql" value="false" />
        </properties>
    </persistence-unit>
 
</persistence>
CREATE TABLE Articles
(
    idarticle INT IDENTITY(1,1),
    reference varchar(10) NOT NULL,
    marque nvarchar(200) NOT NULL,
    designation nvarchar(250) NOT NULL,
    prixUnitaire float NOT NULL,
    qteStock int NOT NULL,
    grammage int NULL,
    couleur nvarchar(50) NULL,
    type nchar(10) NOT NULL,
 
    CONSTRAINT PK_Articles PRIMARY KEY (idarticle)
)
 
INSERT INTO Articles (reference, marque, designation, prixUnitaire, qteStock, grammage, couleur, type) 
VALUES ('Bic', 'BBOrange', 'Bic bille Orange', 1.2, 20, 0, 'Bleu', 'Stylo'),
       ('Bic', 'BBOrange', 'Bic bille Orange', 1.2, 20, 0,'noir', 'Stylo'),
       ('Clairef', 'CRA4S', 'Ramette A4 Sup', 9, 20, 80, null, 'Ramette');