[DBFLUTE-186] {Java}: 主キー以外の条件値でdeleteできるようにする Created: 2008-01-21  Updated: 2008-01-24  Resolved: 2008-01-24

Status: Closed
Project: DBFlute
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Improvement Priority: Major
Reporter: jflute Assignee: jflute
Resolution: Fixed Votes: 0
Labels: None


 Description   

やはりニーズが高い。

既存のdelete()の引数のEntityにPKがなければ別のカラムの値でDeleteってのも
ありかもしれないが、微妙に互換性に不安がある。
削除メソッドということもあり、その辺は慎重にいきたい。

ConditionBeanを使った場合だと以下のような感じ:

MemberCB cb = new MemberCB();
cb.query().setMemberStatusCode_Equal_Formalized();
memberBhv.queryDelete(cb);

delete from MEMBER
 where MEMBER_ID in (
                  select MEMBER_ID from MEMBER where MEMBER_STATUS_CODE = 'FML'
              )

ConditionBeanは逆に結合先条件など何か何までできるので、
Where句はInScopeSubQueryの形でないとやりづらいだろう。

実現としては、そんなに難しくはないかもしれない。
既にあるInScopeSubQueryの要領を得ることができるからである。

Entityを使った場合だと以下のような感じ:

Member member = new Member();
member.classifyMemberStatusCodeFormalized();
member.delete(member);

delete from MEMBER
 where MEMBER_STATUS_CODE = 'FML'

他のプロパティにも値が入ってたらどうしよう...
全部Where句に入れる?
一つだけって限定仕様にする?

実現としては、S2Dao内部を豪快にOverrideする必要がありそう。
ちょっとソースを眺めてみないとなんともいえない。



 Comments   
Comment by jflute [ 2008-01-22 ]

実装した。

    /**
     * Queryを使った削除の基本的な実装。<br />
     * ConditionBeanで設定した条件で一括削除が可能である。(排他制御はない)<br />
     */
    public void test_queryDelete_Basic_Tx() throws Exception {
        // ## Arrange ##
        final PurchaseCB cb = new PurchaseCB();
        cb.query().setPurchaseCount_GreaterEqual(2);
        int expected = purchaseBhv.selectCount(cb);
        
        // ## Act ##
        final int actual = purchaseBhv.queryDelete(cb);
        
        // ## Assert ##
        assertNotSame(0, actual);
        assertEquals(expected, actual);
    }
Comment by jflute [ 2008-01-21 ]

独自のSqlHandlerとSqlCommandを作ることになる。
ConditionBeanはContextに積まれるはずなので、
Commandで取得してそこからはInScopeSubQueryと同じ要領。
そして、S2DaoMetaDataExtensionにて、新しいメソッドの場合にそれら独自のものを使って初期化する。

Generated at Mon Dec 15 11:22:14 JST 2025 using Jira 10.6.1#10060001-sha1:a6461e220f274b29ced7ac9295492f2465fe5ef5.