编写外键关联查询

时间:2012-04-09 22:38:57

标签: java sql hibernate

我在数据库User和Link中有2个表。 userid在链接表中是外来的。我使用hibernate reverse engg xml在java中创建模型类。 它创建了User,Link,LinkId类。这里Link类链接2个表,而LinkId包含Link的属性。 我试图使用userid查询链接表。我的查询是“createQuery( “来自com.paypal.socialpay.models.LinkId li,其中li.userid =?”)。setInteger(0,id).list();“

但是在执行查询时我得到“java.lang.IllegalArgumentException:查询中没有位置参数:来自com.paypal.socialpay.models.LinkId li li.userid =?”

有人可以告诉我我做错了吗

class name="com.paypal.socialpay.models.Link" table="link" catalog="socialdb">
    <composite-id name="id" class="com.paypal.socialpay.models.LinkId">
        <key-property name="id" type="int">
            <column name="id" />
        </key-property>
        <key-property name="userid" type="java.lang.Integer">
            <column name="userid" />
        </key-property>
        <key-property name="title" type="string">
            <column name="title" length="100" />
        </key-property>
        <key-property name="price" type="string">
            <column name="price" length="100" />
        </key-property>
        <key-property name="description" type="string">
            <column name="description" length="500" />
        </key-property>
        <key-property name="contentname" type="string">
            <column name="contentname" length="100" />
        </key-property>
        <key-property name="contentpreviewname" type="string">
            <column name="contentpreviewname" length="100" />
        </key-property>
        <key-property name="contentdisplayname" type="string">
            <column name="contentdisplayname" length="100" />
        </key-property>
        <key-property name="contentpreviewdisplayname" type="string">
            <column name="contentpreviewdisplayname" length="100" />
        </key-property>
        <key-property name="downloadlink" type="string">
            <column name="downloadlink" length="100" />
        </key-property>
        <key-property name="contentsavelocation" type="string">
            <column name="contentsavelocation" length="150" />
        </key-property>
        <key-property name="previewsavelocation" type="string">
            <column name="previewsavelocation" length="150" />
        </key-property>
    </composite-id>
    <many-to-one name="user" class="com.paypal.socialpay.models.User" update="false" insert="false" fetch="select">
        <column name="id" not-null="true" />
    </many-to-one>
</class>

1 个答案:

答案 0 :(得分:1)

尝试使用它:

session.createQuery("from Link where userid=:userId")
    .setParameter("userId", id)
    .list()

更新:我认为映射应如下所示:

    <id name="id" column="id">
      <generator class="native"/> 
    </id>
    <property name="userid" column="userid"/>

等。具有属性,而不是<key-property> s

查询不起作用,因为您尝试从LinkId中选择 - 它不是实体,而是Link的键。可能是一些逆向工程问题。