HQL을 사용하는 데 어려움을 겪고 있습니다. 나는 한 테이블에 여러 경쟁자가있는 어플리케이션을 가지고 있습니다. 그렇다면 나는 경쟁자와 경쟁하는 경쟁을합니다. 각 경쟁에는 경쟁자가 여럿있을 수 있습니다. 각 경쟁자는 여러 경기에 참가할 수 있습니다. (사실, 나는 "라운드 로빈"경쟁을 설정하고 있으므로 모든 경쟁자는 다른 경쟁자와 경쟁 할 수 있도록 많은 경쟁자가 될 것입니다.)Hibernate many-to-many 매핑과 질의
직접 조인 테이블을 만드는 대신, Hibernate의 XML을 사용하여 join 테이블을 생성한다. 궁극적으로, 나는 다음과 같은 HQL 쿼리 같은 것을 쓸 수 있어야한다고 생각 : 실제로 더 큰 쿼리의 일부
select count(*) from Competition c where c.competitor.id = :competitorId
간단한 쿼리. 내 의도는 주어진 경쟁자가 참가하는 대회 수를 세는 것입니다. 내가 만나는 문제는 다음과 같은 오류입니다.
org.hibernate.QueryException: could not resolve property: competitor of: com.sodapopsoftware.imagewar.model.db.Competition [ select count(*) from com.sodapopsoftware.imagewar.model.db.Competition c where c.competitor.id = :competitorId ]
다음은 경쟁자 및 경쟁자를위한 나의 매핑입니다.
경쟁
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.sodapopsoftware.imagewar.model.db.Competition" table="competition">
<meta attribute="use-in-tostring">true</meta>
<meta attribute="extra-import">java.util.Set</meta>
<meta attribute="extra-import">java.util.TreeSet</meta>
<id name="competitionId" column="competition_id" type="int">
<meta attribute="scope-set">protected</meta>
<meta attribute="field-description">Primary Key</meta>
<meta attribute="use-in-equals">true</meta>
<generator class="native" />
</id>
<many-to-one name="league" column="league_id" unique="false" not-null="true"
class="com.sodapopsoftware.imagewar.model.db.League"
/>
<property name="dateAdded" column="date_added" type="date" not-null="true">
<meta attribute="field-description">When the league was created</meta>
</property>
<set name="competitors" table="competition_competitors" sort="com.sodapopsoftware.imagewar.model.util.CompetitorIdComparator">
<meta attribute="property-type"><![CDATA[Set<Competitor>]]></meta>
<meta attribute="default-value"><![CDATA[new TreeSet<Competitor>()]]></meta>
<key column="competition_id"/>
<many-to-many column="competitor_id"
unique="false"
class="com.sodapopsoftware.imagewar.model.db.Competitor"/>
</set>
</class>
</hibernate-mapping>
경쟁자 쿼리가 참조 구문 (ManyToOne)하지만 하나/다 대다 명시 적 필요를 사용
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.sodapopsoftware.imagewar.model.db.Competitor" table="competitor">
<meta attribute="use-in-tostring">true</meta>
<meta attribute="extra-import">java.lang.Comparable</meta>
<meta attribute="implements">Comparable<![CDATA[<]]> Competitor <![CDATA[>]]></meta>
<meta attribute="class-code"> private static final long serialVersionUID = 1L;</meta>
<meta attribute="class-code">
public int compareTo(Competitor that) {
if (that != null) {
return this.getCompetitorId() - that.getCompetitorId();
}
return 1;
}
</meta>
<id name="competitorId" column="competitor_id" type="int">
<meta attribute="scope-set">protected</meta>
<meta attribute="use-in-equals">true</meta>
<generator class="native" />
</id>
<many-to-one name="league" column="league_id" unique="false" not-null="true"
class="com.sodapopsoftware.imagewar.model.db.League"
/>
<property name="name" column="name" type="string" not-null="true">
<meta attribute="field-description">Gives this competitor a name</meta>
</property>
<property name="nameNormalized" column="name_normalized" unique="true" type="string" not-null="true">
<meta attribute="field-description">Same as name, but lower case for searching</meta>
</property>
<property name="description" column="description" type="string">
<meta attribute="field-description">Describes this competitor</meta>
</property>
<property name="linkImageThumbnail" column="link_image_thumbnail" type="string" not-null="true">
<meta attribute="field-description">Link to the thumbnail image for this competitor</meta>
</property>
<property name="linkImageFullSized" column="link_image_full_sized" type="string" not-null="true">
<meta attribute="field-description">Link to the full-sized image for this competitor</meta>
</property>
<property name="dateAdded" column="date_added" type="date" not-null="true">
<meta attribute="field-description">When the competitor was created</meta>
</property>
</class>
</hibernate-mapping>
Do y 사람들이 끊임없이 무릎을 꿇고 당신에게 감사 할 때 신은 그것을 귀찮아합니다. – Marvo
"감사합니다"적어도 내게 가장 좋은 보상이다 – Firo
고마워! 무리를 도왔다. – Marvo