admin

通过调用Java方法为H2数据库中的新行生成默认值

sql

生成测试数据时,我希望新行中的字段默认为 lorem 生成的乱码,
lorem
是Java的Lorem
Ipsum
生成器。

在Java中调用lorem工具如下所示:

 String lorem = LoremIpsum.getInstance().getWords( 100 , 120 );

我尝试使用此SQL作为表定义:

String sql =
        """
        CREATE ALIAS LOREM FOR "com.thedeanda.lorem.LoremIpsum.getInstance().getWords( 100 , 120 )";
        CREATE TABLE IF NOT EXISTS thing_
        (
            nonsense_ text NOT NULL  ,
            row_created_ TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP() ,
            id_ uuid NOT NULL DEFAULT RANDOM_UUID() ,
            CONSTRAINT thing_pkey_ PRIMARY KEY ( id_ )
        )
        ;
        """;

但这引发了:

org.h2.jdbc.JdbcSQLSyntaxErrorException:找不到公共静态Java方法:“
getInstance()。getWords(100,120)(com.thedeanda.lorem.LoremIpsum)”;SQL语句:

为“
com.thedeanda.lorem.LoremIpsum.getInstance()。getWords(100,120)”创建别名。[90139-200]

有什么方法可以包装对Java方法的调用以用作H2的SQL中的函数?


阅读 224

收藏
2021-07-01

共1个答案

admin

我认为您不能包含参数,也不能调用实例方法。您需要制作一个静态方法:

public class Whatever {
    public static String generateLorem() {
        return LoremIpsum.getInstance().getWords(100, 120);
    }
}

接着

CREATE ALIAS LOREM FOR "com.foo.Whatever.generateLorem";
2021-07-01