Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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 hibernate中的is-a关系_Java_Hibernate - Fatal编程技术网

Java hibernate中的is-a关系

Java hibernate中的is-a关系,java,hibernate,Java,Hibernate,我正在尝试hibernate中Is-A关系的基本示例,但遇到了错误 <joined-subclass name="beans.SEmployee" table="semployee" extends="beans.Employee"> <key column="id"></key> <property name="tool"></property> </joined-subclass> <joined-subclas

我正在尝试hibernate中Is-A关系的基本示例,但遇到了错误

<joined-subclass name="beans.SEmployee" table="semployee" extends="beans.Employee">
<key column="id"></key>
<property name="tool"></property>
</joined-subclass>

<joined-subclass name="beans.HEmployee" table="hemployee" extends="beans.Employee">
<key column="id"></key>
<property name="wh"></property>
</joined-subclass>

<joined-subclass name="beans.AEmployee" table="aemployee" extends="beans.Employee">
<key column="id"></key>
<property name="server"></property>
</joined-subclass>
</class>
</hibernate-mapping>```
我已经创建了Employee类的3个子类

<joined-subclass name="beans.SEmployee" table="semployee" extends="beans.Employee">
<key column="id"></key>
<property name="tool"></property>
</joined-subclass>

<joined-subclass name="beans.HEmployee" table="hemployee" extends="beans.Employee">
<key column="id"></key>
<property name="wh"></property>
</joined-subclass>

<joined-subclass name="beans.AEmployee" table="aemployee" extends="beans.Employee">
<key column="id"></key>
<property name="server"></property>
</joined-subclass>
</class>
</hibernate-mapping>```
  • 雇员
  • 被雇佣者
  • 雇员
  • 并使用(联接子类)标记建立关系

    <joined-subclass name="beans.SEmployee" table="semployee" extends="beans.Employee">
    <key column="id"></key>
    <property name="tool"></property>
    </joined-subclass>
    
    <joined-subclass name="beans.HEmployee" table="hemployee" extends="beans.Employee">
    <key column="id"></key>
    <property name="wh"></property>
    </joined-subclass>
    
    <joined-subclass name="beans.AEmployee" table="aemployee" extends="beans.Employee">
    <key column="id"></key>
    <property name="server"></property>
    </joined-subclass>
    </class>
    </hibernate-mapping>```
    
    在此之前,我尝试了使用(子类)标记的相同示例,它工作得非常好,但现在使用(连接子类)错误正在显示。 除了xml标记外,我没有做任何更改。 我不知道我做错了什么

    <joined-subclass name="beans.SEmployee" table="semployee" extends="beans.Employee">
    <key column="id"></key>
    <property name="tool"></property>
    </joined-subclass>
    
    <joined-subclass name="beans.HEmployee" table="hemployee" extends="beans.Employee">
    <key column="id"></key>
    <property name="wh"></property>
    </joined-subclass>
    
    <joined-subclass name="beans.AEmployee" table="aemployee" extends="beans.Employee">
    <key column="id"></key>
    <property name="server"></property>
    </joined-subclass>
    </class>
    </hibernate-mapping>```
    
    mysql.cfg.xml

     <!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
        <hibernate-configuration>
        <session-factory>
         <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernatedata</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">root</property>
        <property name="hibernate.connection.pool_size">10</property>
        <property name="show_sql">true</property>
        <property name="format_sql">true</property>
        <property name="hbm2ddl.auto">update</property>
    
        <mapping resource="resources/employee.hbm.xml"/>
        </session-factory>
        </hibernate-configuration>
    
    <joined-subclass name="beans.SEmployee" table="semployee" extends="beans.Employee">
    <key column="id"></key>
    <property name="tool"></property>
    </joined-subclass>
    
    <joined-subclass name="beans.HEmployee" table="hemployee" extends="beans.Employee">
    <key column="id"></key>
    <property name="wh"></property>
    </joined-subclass>
    
    <joined-subclass name="beans.AEmployee" table="aemployee" extends="beans.Employee">
    <key column="id"></key>
    <property name="server"></property>
    </joined-subclass>
    </class>
    </hibernate-mapping>```
    
    异常日志:

    <joined-subclass name="beans.SEmployee" table="semployee" extends="beans.Employee">
    <key column="id"></key>
    <property name="tool"></property>
    </joined-subclass>
    
    <joined-subclass name="beans.HEmployee" table="hemployee" extends="beans.Employee">
    <key column="id"></key>
    <property name="wh"></property>
    </joined-subclass>
    
    <joined-subclass name="beans.AEmployee" table="aemployee" extends="beans.Employee">
    <key column="id"></key>
    <property name="server"></property>
    </joined-subclass>
    </class>
    </hibernate-mapping>```
    
            Sep 11, 2019 10:25:58 AM org.hibernate.Version logVersion
            INFO: HHH000412: Hibernate Core {5.4.4.Final}
            Sep 11, 2019 10:25:59 AM 
    
            org.hibernate.annotations.common.reflection.java.JavaReflectionManage                  
            <clinit>
            INFO: HCANN000001: Hibernate Commons Annotations {5.1.0.Final}
            Sep 11, 2019 10:26:01 AM 
            org.hibernate.engine.jdbc.connections.internal.
            DriverManagerConnectionProviderImpl configure
            WARN: HHH10001002: Using Hibernate built-in connection pool (not for 
            production use!)
            Sep 11, 2019 10:26:01 AM 
            org.hibernate.engine.jdbc.connections.internal.
            DriverManagerConnectionProviderImpl buildCreator
            INFO: HHH10001005: using driver [com.mysql.jdbc.Driver] at URL 
            [jdbc:mysql://localhost:3306/hibernatedata]
            Sep 11, 2019 10:26:01 AM 
            org.hibernate.engine.jdbc.connections.internal.
            DriverManagerConnectionProviderImpl buildCreator
            INFO: HHH10001001: Connection properties: {user=root, password=****}
            Sep 11, 2019 10:26:01 AM 
            org.hibernate.engine.jdbc.connections.internal.
            DriverManagerConnectionProviderImpl buildCreator
            INFO: HHH10001003: Autocommit mode: false
           Sep 11, 2019 10:26:01 AM 
           org.hibernate.engine.jdbc.connections.internal.
           DriverManagerConnectionProviderImpl$PooledConnections <init>
           INFO: HHH000115: Hibernate connection pool size: 10 (min=1)
           Sep 11, 2019 10:26:01 AM org.hibernate.dialect.Dialect <init>
           INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect
           Sep 11, 2019 10:26:03 AM org.hibernate.AssertionFailure <init>
           ERROR: HHH000099: an assertion failure occurred (this may indicate a 
           bug in Hibernate, but is more likely due to unsafe use of the 
           session): org.hibernate.AssertionFailure: Table hibernatedata.employee 
           not found
           Sep 11, 2019 10:26:03 AM 
           org.hibernate.engine.jdbc.connections.internal.
           DriverManagerConnectionProviderImpl$PoolState stop
          INFO: HHH10001008: Cleaning up connection pool 
          [jdbc:mysql://localhost:3306/hibernatedata]
          Exception in thread "main" org.hibernate.MappingException: Could not  
          instantiate persister 
          org.hibernate.persister.entity.JoinedSubclassEntityPersister
          at 
          org.hibernate.persister.internal.PersisterFactoryImpl.
          createEntityPersister(PersisterFactoryImpl.java:112)
          at 
          org.hibernate.persister.internal.PersisterFactoryImpl.
          createEntityPersister(PersisterFactoryImpl.java:77)
          at 
          org.hibernate.metamodel.internal.MetamodelImpl.
          initialize(MetamodelImpl.java:181)
         at org.hibernate.internal.SessionFactoryImpl.<init> 
         (SessionFactoryImpl.java:300)
         at 
         org.hibernate.boot.internal.
         SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:462)
         at 
        org.hibernate.cfg.Configuration.
        buildSessionFactory(Configuration.java:708)
        at 
        org.hibernate.cfg.Configuration.
        buildSessionFactory(Configuration.java:724)
        at test.Client_Relations.main(Client_Relations.java:17)
        Caused by: org.hibernate.AssertionFailure: Table hibernatedata.employee 
        not found
        at
        org.hibernate.persister.entity.AbstractEntityPersister.
        getTableId(AbstractEntityPersister.java:5541)
        at org.hibernate.persister.entity.JoinedSubclassEntityPersister.<init> 
        (JoinedSubclassEntityPersister.java:450)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at 
        sun.reflect.NativeConstructorAccessorImpl.newInstance
        (NativeConstructorAccessorImpl.java:62)
        at 
        sun.reflect.DelegatingConstructorAccessorImpl.
        newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at org.hibernate.persister.internal.PersisterFactoryImpl.
        createEntityPersister(PersisterFactoryImpl.java:96)
        ... 7 more
    
    
    
    2019年9月11日上午10:25:58 org.hibernate.Version日志版本
    信息:hh000412:Hibernate核心{5.4.4.Final}
    2019年9月11日上午10:25:59
    org.hibernate.annotations.common.reflection.java.JavaReflectionManager
    信息:HCANN000001:Hibernate Commons注释{5.1.0.Final}
    2019年9月11日上午10:26:01
    org.hibernate.engine.jdbc.connections.internal。
    DriverManager连接ProviderImpl配置
    警告:HHH10001002:使用Hibernate内置连接池(不适用于
    生产使用!)
    2019年9月11日上午10:26:01
    org.hibernate.engine.jdbc.connections.internal。
    DriverManager连接ProviderImpl buildCreator
    信息:HHH10001005:在URL处使用驱动程序[com.mysql.jdbc.driver]
    [jdbc:mysql://localhost:3306/hibernatedata]
    2019年9月11日上午10:26:01
    org.hibernate.engine.jdbc.connections.internal。
    DriverManager连接ProviderImpl buildCreator
    信息:HHH10001001:连接属性:{user=root,password=***}
    2019年9月11日上午10:26:01
    org.hibernate.engine.jdbc.connections.internal。
    DriverManager连接ProviderImpl buildCreator
    信息:HHH10001003:自动提交模式:错误
    2019年9月11日上午10:26:01
    org.hibernate.engine.jdbc.connections.internal。
    DriverManager连接ProviderImpl$PooledConnections
    信息:HH000115:休眠连接池大小:10(最小值=1)
    2019年9月11日上午10:26:01 org.hibernate.dialogue.dialogue
    信息:HH000400:使用方言:org.hibernate.dialogue.mysqldialogue
    2019年9月11日上午10:26:03 org.hibernate.AssertionFailure
    错误:HH000099:发生断言失败(这可能表示
    Hibernate中的错误,但更可能是由于不安全地使用
    会话):org.hibernate.AssertionFailure:表hibernatedata.employee
    找不到
    2019年9月11日上午10:26:03
    org.hibernate.engine.jdbc.connections.internal。
    DriverManager连接ProviderImpl$PoolState停止
    信息:HHH10001008:清理连接池
    [jdbc:mysql://localhost:3306/hibernatedata]
    线程“main”org.hibernate.MappingException中的异常:无法
    实例化持久器
    org.hibernate.persister.entity.JoinedSubclassEntityPersister
    在
    org.hibernate.persister.internal.PersisterFactoryImpl。
    createEntityPersister(PersisterFactoryImpl.java:112)
    在
    org.hibernate.persister.internal.PersisterFactoryImpl。
    createEntityPersister(PersisterFactoryImpl.java:77)
    在
    org.hibernate.metamodel.internal.MetamodelImpl。
    初始化(MetamodelImpl.java:181)
    位于org.hibernate.internal.SessionFactoryImpl。
    (SessionFactoryImpl.java:300)
    在
    org.hibernate.boot.internal。
    SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:462)
    在
    org.hibernate.cfg.Configuration。
    buildSessionFactory(Configuration.java:708)
    在
    org.hibernate.cfg.Configuration。
    buildSessionFactory(Configuration.java:724)
    test.Client\u Relations.main(Client\u Relations.java:17)
    原因:org.hibernate.AssertionFailure:表hibernatedata.employee
    找不到
    在
    org.hibernate.persister.entity.AbstractEntityPersister。
    getTableId(AbstractEntityPersister.java:5541)
    位于org.hibernate.persister.entity.JoinedSubclassEntityPersister。
    (JoinedSubassentitypersister.java:450)
    位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
    在
    sun.reflect.nativeConstructor附件mpl.newInstance
    (NativeConstructorAccessorImpl.java:62)
    在
    sun.reflect.delegatingconstructor或accessorimpl。
    newInstance(DelegatingConstructorAccessorImpl.java:45)
    位于java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    位于org.hibernate.persister.internal.PersisterFactoryImpl。
    createEntityPersister(PersisterFactoryImpl.java:96)
    ... 还有7个
    
    此错误表明数据库中不存在表Employee

    <joined-subclass name="beans.SEmployee" table="semployee" extends="beans.Employee">
    <key column="id"></key>
    <property name="tool"></property>
    </joined-subclass>
    
    <joined-subclass name="beans.HEmployee" table="hemployee" extends="beans.Employee">
    <key column="id"></key>
    <property name="wh"></property>
    </joined-subclass>
    
    <joined-subclass name="beans.AEmployee" table="aemployee" extends="beans.Employee">
    <key column="id"></key>
    <property name="server"></property>
    </joined-subclass>
    </class>
    </hibernate-mapping>```
    
    Caused by: org.hibernate.AssertionFailure: Table hibernatedata.employee 
        not found
    
    您需要更换

    <joined-subclass name="beans.SEmployee" table="semployee" extends="beans.Employee">
    <key column="id"></key>
    <property name="tool"></property>
    </joined-subclass>
    
    <joined-subclass name="beans.HEmployee" table="hemployee" extends="beans.Employee">
    <key column="id"></key>
    <property name="wh"></property>
    </joined-subclass>
    
    <joined-subclass name="beans.AEmployee" table="aemployee" extends="beans.Employee">
    <key column="id"></key>
    <property name="server"></property>
    </joined-subclass>
    </class>
    </hibernate-mapping>```
    
        <property name="hbm2ddl.auto">update</property>
    
        <property name="hbm2ddl.auto">create</property>
    
    更新
    

    <joined-subclass name="beans.SEmployee" table="semployee" extends="beans.Employee">
    <key column="id"></key>
    <property name="tool"></property>
    </joined-subclass>
    
    <joined-subclass name="beans.HEmployee" table="hemployee" extends="beans.Employee">
    <key column="id"></key>
    <property name="wh"></property>
    </joined-subclass>
    
    <joined-subclass name="beans.AEmployee" table="aemployee" extends="beans.Employee">
    <key column="id"></key>
    <property name="server"></property>
    </joined-subclass>
    </class>
    </hibernate-mapping>```
    
        <property name="hbm2ddl.auto">update</property>
    
        <property name="hbm2ddl.auto">create</property>
    
    创建
    
    该表是否存在?错误日志显示Table
    hibernatedata.employee未找到
    yes错误日志显示的正是:Table hibernatedata.employee未找到这是自我解释的,不是吗?但我提到了创建它应该在找不到表的情况下创建表。是的,但我尝试了“创建”和“验证”同样的错误也发生了。感谢yash,我尝试了创建和验证选项,正如我前面所说的,但它不起作用。发生了相同的错误。您的代码是否正在数据库中创建表@RehanQuaziok,所以我不知道怎么做,但我已经从employee.hbm.xml文件的class标记中删除了schema=“hibernatedata”属性,代码运行正常。如果你能解释一下为什么这是正确的。谢谢,问题是
    jdbc:mysql://localhost:3306/hibernatedata
    您已经在连接URL中提到了架构名称。所以hibernate从那里获取了模式。之前,它在hibernatedata模式中查找表hibernatedata.employee。因此,现在您从employee.hbm.xml文件中的class标记中删除了schema=“hibernatedata”属性。它将在hibernatedata模式中查找表employee@雷汉夸齐