where
속성 행동 대다가 매우 이상하다를 위해 ...
는 최대 절전 모드 로깅이 원시입니다 활성화합니다. 이 게시물에 당신을 참조하십시오 내가 좋아하는 모든 기사를 나열 할 때
/**
* @output false
* @persistent true
* @table article
*/
component {
property name="id" fieldtype="id";
property name="title";
property
name="tags" singularname="tag"
fieldtype="many-to-many" cfc="Tag" linktable="link_article_tag" fkcolumn="articleId"
inversejoincolumn="tagId" where=" deleted = 0 "
;
}
Tag.cfc
/**
* @output false
* @persistent true
* @table tag
*/
component {
property name="id" fieldtype="id";
property name="name";
property name="deleted" dbdefault="0";
property
name="articles" singularname="article"
fieldtype="many-to-many" cfc="Article" linktable="link_article_tag" fkcolumn="tagId"
inversejoincolumn="articleId"
;
}
을
Article.cfc : http://www.rupeshk.org/blog/index.php/2009/07/coldfusion-orm-how-to-log-sql/
이 예제를 가지고 이 ormExecuteQuery('from Article')
, 최대 절전 모드 로그에 첨부 된 내용 참조 :
select
tags0_.articleId as articleId6_1_,
tags0_.tagId as tagId1_,
tag1_.id as id0_0_,
tag1_.name as name0_0_,
tag1_.deleted as deleted0_0_
from
link_article_tag tags0_
inner join
tag tag1_
on tags0_.tagId=tag1_.id
where
tags0_.deleted = 0
저주! WTF : | tags0_ == 테이블 조인 ... 무엇이 잘못되었는지 보시겠습니까?
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class entity-name="Tag" lazy="true"
name="cfc:www.app.models.test.Tag" table="tag">
<id name="id" type="string">
<column length="255" name="id"/>
</id>
<property name="name" type="string">
<column name="name"/>
</property>
<property name="deleted" type="string">
<column default="0" name="deleted"/>
</property>
<bag name="articles" table="link_article_tag">
<key column="tagId"/>
<many-to-many class="cfc:www.app.models.test.Article" column="articleId"/>
</bag>
</class>
</hibernate-mapping>
:이 동작을 이해하기 위해
, 나는
this.ormSettings.saveMapping = true
다음과 Application.cfc에 HBMXML 생성을 활성화거야 파일입니다
우리가 볼 수있는 것 : where
속성은 many-to-many
이 아닌 bag
수준으로 설정됩니다.나는 이런 식으로 편집하는 경우 :
<bag name="tags" table="link_article_tag">
<key column="articleId"/>
<many-to-many class="cfc:www.app.models.test.Tag" column="tagId" where=" deleted = 0 "/>
</bag>
생성 된 SQL이 될 :
select
tags0_.articleId as articleId62_1_,
tags0_.tagId as tagId1_,
tag1_.id as id59_0_,
tag1_.name as name59_0_,
tag1_.deleted as deleted59_0_
from
link_article_tag tags0_
inner join
tag tag1_
on tags0_.tagId=tag1_.id
where
tag1_.deleted = 0
이 방법은 작동하지만 코드의 유지 보수 및 가독성에 좋지 않다. 누군가가 더 나은 해결책을 가지고 있다면, 나는 흥미 롭다.
그래서 문제는 where 절이 다른 개체 테이블이 아니라 연결 테이블을 쿼리한다는 것입니다. 그래서 우리가 어떻게 수정합니까? – Rumpleteaser