生成测试数据时,我希望新行中的字段默认为 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]
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中的函数?
我认为您不能包含参数,也不能调用实例方法。您需要制作一个静态方法:
public class Whatever { public static String generateLorem() { return LoremIpsum.getInstance().getWords(100, 120); } }
接着
CREATE ALIAS LOREM FOR "com.foo.Whatever.generateLorem";