したがって、私は別のテーブルで最初に作成する必要があるSQLテーブルにIDを設定する必要があるため、挿入クエリが実行される前にトリガするH2トリガを作成しようとしていますH2トリガーはトリガーされません
インサートが、このようになりますが起こるはず表:
CREATE TABLE IF NOT EXISTS INGREDIENTS(
ID INT NOT NULL,
Name VARCHAR(50),
ALK INT check (ALK <= 100 and ALK >= 0),
CalPerHundred INT,
PRICE DOUBLE check(PRICE>=0),
FOREIGN KEY (ID) REFERENCES ITEM(ID)
);
トリガーのために作成します。
CREATE TRIGGER IF NOT EXISTS ING_TRIGGER
BEFORE INSERT
ON INGREDIENTS
FOR EACH ROW
CALL "Partyplaner.Persistence.Trigger.IngredientsTrigger";
トリガー用のコードを:
public class IngredientsTrigger implements Trigger {
private Logger LOGGER = LoggerFactory.getLogger(IngredientsTrigger.class);
@Override
public void init(Connection conn, String schemaName,
String triggerName, String tableName, boolean before, int type)
throws SQLException {
LOGGER.debug("hello im init");
}
@Override
public void fire(Connection conn, Object[] oldRow, Object[] newRow)throws SQLException {
LOGGER.debug("hello im fire");
PreparedStatement pstmt_key;
try {
pstmt_key = conn.prepareStatement("INSERT INTO ITEM() VALUES()");
} catch (SQLException e) {
throw e;
}
pstmt_key.executeUpdate();
ResultSet generatedKeys = pstmt_key.getGeneratedKeys();
generatedKeys.next();
int id = generatedKeys.getInt(1);
generatedKeys.close();
newRow[0]=id;
}
@Override
public void close() throws SQLException {}
@Override
public void remove() throws SQLException {}
}
私はH2 WebInterfaceでトリガーを見ることができますが、成分を挿入しようとするとNULLにIDが許可されないというSQLエラーが発生します。トリガーがすべきことはまさにそれですか?私はトリガからのinitログメッセージしか見ることができませんので、私はそれが呼び出されないようにしています。5回のようにファイルを作成してクラスパスをチェックし、Trigger.class.getName()で印刷させてください。
私はMavenとSpringを使用していますが、Classpathが別のものになっている可能性がありますか?