hibernateとMYSQLは2つの文字列の配列の交差を求めます
810 ワード
プロジェクトでは、1つのテーブルのフィールドにIDセットが保存されています.
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で直接使用できることがわかります
# 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で直接使用できることがわかります