hibernateとMYSQLは2つの文字列の配列の交差を求めます

810 ワード

プロジェクトでは、1つのテーブルのフィールドにIDセットが保存されています.
#  FUNCTION
DELIMITER $$;
 
CREATE FUNCTION `is_mixed`(str1 TEXT, str2 TEXT) RETURNS TINYINT
    BEGIN
    DECLARE ismixed TINYINT DEFAULT 0;
    set ismixed:=(select concat(str1, ',') regexp concat(replace(str2,',',',|'), ','));
    RETURN ismixed;
    END;$$
 
DELIMITER ;
 
#  FUNCTION
select is_mixed('1001,1002,1003,1004', '1001,2001,3001,4001');

 
MySQLにはブールタイプがないのでtinyintタイプの1と0を選択してtrueとfalseを表します.
 
実行結果:戻り結果は1で、trueを表し、交差が存在します.
次にhibernateでも同様に使用しますが、1つ以上の>0を条件として追加するには、交差がある場合は0より大きく、hibernateのhql文は次のようになります.
select o from WeixinConfig  o  where 1=1  and is_mixed(?,groupIds)>0
groupIdsはテーブルのフィールドです.
mysqlで定義された関数はhibernateで直接使用できることがわかります