Java hibernate中的is-a关系
我正在尝试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
<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>
创建
该表是否存在?错误日志显示Tablehibernatedata.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@雷汉夸齐