2014-11-25 2 views
-1

У меня есть две таблицы таблица 1 пользователя (идентификатор * (рк) , имя, адрес электронной почты, PWD) таблица 2 твит (tweet_id, сообщение, user_id (Ф.К.) *)Как использовать внутренний запрос соединения в hql?

user_id - это внешний ключ для идентификатора таблицы пользователя. Я хочу присоединиться к этим двум таблицам, используя внутреннее соединение в hql.

Я получаю эту ошибку.

Исключение из потока "main" org.hibernate.hql.ast.QuerySyntaxException: неожиданный токен: на близкой строке 1, столбец 74 [выберите имя_пользователя, сообщение из com.csc.project.user e внутреннее соединение tweet p на p .user_id = e.id где e.user_name =: name] at org.hibernate.hql.ast.QuerySyntaxException.convert (QuerySyntaxException.java:31) at org.hibernate.hql.ast.QuerySyntaxException.convert (QuerySyntaxException. Java: 24) в org.hibernate.hql.ast.ErrorCounter.throwQueryException (ErrorCounter.java:59) на org.hibernate.hql.ast.QueryTranslatorImpl.parse (QueryTranslatorImpl.java:258) на org.hibernate. hql.ast.QueryTranslatorImpl.doCompile (QueryTranslatorImpl.java:157) at org.hibernate.hql.ast.QueryTran slatorImpl.compile (QueryTranslatorImpl.java:111) на org.hibernate.engine.query.HQLQueryPlan. (HQLQueryPlan.java:77) на org.hibernate.engine.query.HQLQueryPlan. (HQLQueryPlan.java:56) на org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan (QueryPlanCache.java:72) на org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan (AbstractSessionImpl.java:133) в org.hibernate.impl.AbstractSessionImpl.createQuery (AbstractSessionImpl. java: 112) at org.hibernate.impl.SessionImpl.createQuery (SessionImpl.java:1623) at com.csc.project.tweetManager.viewtweet (tweetManager.java:80) at com.csc.project.tweetManager. main (tweetManager.java:103)

это мой hibernate.cfg

<!DOCTYPE hibernate-configuration PUBLIC 
"-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
"hibernate-configuration-3.0.dtd"> 

<hibernate-configuration> 
<session-factory> 


<property name="connection.driver_class">com.mysql.jdbc.Driver</property> 
<property name="connection.url">jdbc:mysql://localhost/twitter</property> 
<property name="connection.user">root</property> 
<property name="connection.password">root</property> 



<property name="show_sql">true </property> 
<property name="dialet">org.hibernate.dialect.MySQLDialect </property> 
<property name="hbm2ddl.auto">update </property> 

<mapping resource="registration.hbm.xml" /> 
<mapping resource="tweet.hbm.xml"/> 


</session-factory> 
</hibernate-configuration> 

reigistration.hbm

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE hibernate-mapping PUBLIC 
"-//Hibernate/Hibernate Mapping DTD//EN" 
"hibernate-mapping-3.0.dtd"> 
<hibernate-mapping> 
    <class name="com.csc.project.user" table="t1"> 
     <meta attribute="class-description"> 
     This class contains the employee detail. 
     </meta> 
     <id name="id" type="int" column="id"> 
     <generator class="increment"/> 
     </id> 



     <property name="user_name" column="user_name" type="string"/> 
     <property name="user_email" column="user_email" type="string"/> 
     <property name="password" column="password" type="string"/> 
     <property name="created" type="timestamp" column="created"/> 
    </class> 
</hibernate-mapping> 

tweet.hbm

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE hibernate-mapping PUBLIC 
"-//Hibernate/Hibernate Mapping DTD//EN" 
"hibernate-mapping-3.0.dtd"> 
<hibernate-mapping> 
    <class name="com.csc.project.tweet" table="t2"> 
     <meta attribute="class-description"> 
     This class contains the employee detail. 
     </meta> 
     <id name="tweet_id" type="int" column="tweet_id"> 
     <generator class="increment"/> 
     </id> 


    <property name="user_id" column="user_id" type="int"/> 
     <property name="message" column="message" type="string"/> 
    <!-- <property name="user_email" column="user_email" type="string"/> 
     <property name="password" column="password" type="string"/> --> 
     <property name="created" type="timestamp" column="created"/> 
    </class> 
</hibernate-mapping> 
+0

показать свои сущности и код, как вы работаете в программе. – Chaitanya

+0

Пожалуйста, добавьте код Java, который вы пробовали, когда у вас есть это исключение. – Chaitanya

ответ

0

Я полагаю, ваше свойство компонента как имя поля БД

Если вы хотите получить твиты об одном пользователе, ваш HQL будет:

select e.user_name, p.message 
from tweet p, t.com.csc.project.user e 
where p.user_id=e.id 
and e.user_name=:name 

Используйте всегда псевдоним перед тем полям, и вы можете заменить ваш явный join with implicit join (с запятой)

Смежные вопросы