データベースのモデリング/マッピングに Hibernate を使用する方法を学んでいます。User モデルを取得するために、次のコード スニペットを使用しています。
Session session = HibernateUtil.getSessionFactory().openSession();
User user = (User) session.get(User.class, id);
session.close();
ユーザーの構成ファイルは次のようになります。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 2.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<hibernate-mapping>
<class name="c3.data.User">
<id name="id" type="java.lang.Integer">
<generator class="identity"/>
</id>
<property name="username" type="java.lang.String"/>
<property name="password" type="java.lang.String"/>
<property name="email" type="java.lang.String"/>
<property name="salt" type="java.lang.String"/>
<one-to-one name="authSession" property-ref="user" class="c3.data.AuthSession"/>
<set name="projects" inverse="true">
<key column="projectLeadId"/>
<one-to-many class="c3.data.Project"/>
</set>
</class>
</hibernate-mapping>
ご覧のとおり、AuthSession および Project と呼ばれる他のモデルとの関係を保持しています。必要に応じて、構成ファイルを投稿できます。
私が抱えている問題は、Session.get() を呼び出すと、返されないことです。ハングするだけです。Hibernate はクエリを表示し、ユーザー、AuthSession、およびプロジェクトのクエリを実行します。パラメータの値を確認しないことを除けば、クエリは正しいように見えます。プロジェクトのクエリの後、何も起こりません。get の呼び出しの直後に print ステートメントを配置しましたが、印刷されません。
何が問題なのかを確認するために他に何をチェックすればよいかわかりません。何かご意見は?
編集: 例外がありました。スタック トレースは次のとおりです。
java.lang.NullPointerException
at org.hibernate.persister.entity.AbstractEntityPersister.loadByUniqueKey(AbstractEntityPersister.java:2314)
at org.hibernate.type.EntityType.loadByUniqueKey(EntityType.java:664)
at org.hibernate.type.EntityType.resolve(EntityType.java:444)
at org.hibernate.engine.internal.TwoPhaseLoad.doInitializeEntity(TwoPhaseLoad.java:168)
at org.hibernate.engine.internal.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:134)
at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:999)
at org.hibernate.loader.Loader.doQuery(Loader.java:878)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:293)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:263)
at org.hibernate.loader.Loader.loadCollection(Loader.java:2094)
at org.hibernate.loader.collection.CollectionLoader.initialize(CollectionLoader.java:61)
at org.hibernate.persister.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:678)
at org.hibernate.event.internal.DefaultInitializeCollectionEventListener.onInitializeCollection(DefaultInitializeCollectionEventListener.java:82)
at org.hibernate.internal.SessionImpl.initializeCollection(SessionImpl.java:1801)
at org.hibernate.collection.internal.AbstractPersistentCollection.forceInitialization(AbstractPersistentCollection.java:661)
at org.hibernate.engine.internal.StatefulPersistenceContext.initializeNonLazyCollections(StatefulPersistenceContext.java:1014)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:298)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:263)
at org.hibernate.loader.Loader.loadEntity(Loader.java:1977)
at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:82)
at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:72)
at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3821)
at org.hibernate.event.internal.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:458)
at org.hibernate.event.internal.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:427)
at org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:204)
at org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:260)
at org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:148)
at org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1075)
at org.hibernate.internal.SessionImpl.access$2000(SessionImpl.java:175)
at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.load(SessionImpl.java:2421)
at org.hibernate.internal.SessionImpl.get(SessionImpl.java:971)
at c3.data.UserManager.getUser(UserManager.java:22)
at c3.data.AuthSessionManager.sessionExists(AuthSessionManager.java:14)
at c3.console.Server.logon(Server.java:289)
at c3.console.Server.onToken(Server.java:242)
at tokenwebsocket.server.TokenWebSocketServer.onMessage(TokenWebSocketServer.java:37)
at org.java_websocket.server.WebSocketServer.onWebsocketMessage(WebSocketServer.java:457)
at org.java_websocket.WebSocketImpl.deliverMessage(WebSocketImpl.java:561)
at org.java_websocket.WebSocketImpl.decodeFrames(WebSocketImpl.java:328)
at org.java_websocket.WebSocketImpl.decode(WebSocketImpl.java:149)
at org.java_websocket.server.WebSocketServer$WebSocketWorker.run(WebSocketServer.java:593)