为了账号安全,请及时绑定邮箱和手机立即绑定

在jooq中使用DAO时出现DataAccessException

在jooq中使用DAO时出现DataAccessException

动漫人物 2023-12-13 15:07:05
我想使用 DAO 将生成的 Pojo 添加到数据库。但我收到异常并且不知道如何解决它。我尝试在每个表前面添加一个 Public.Troop 。将部队插入到 DAO 用法中:TroopDao dao = new TroopDao(new DefaultConfiguration().set(SQLDialect.SQLITE).set(database.getConnection()));Troop initial = new Troop(1, 100, 120, 120.2, 11.2, 12.0, 13.0, 6245.0, 1534.0, 1364.0, 121235.3, 125.3, 51.3);dao.insert(initial);使用的数据库文件:CREATE TABLE IF NOT EXISTS TROOP(    id INTEGER PRIMARY KEY AUTOINCREMENT,    current_health INTEGER NOT NULL,    max_health INTEGER NOT NULL,    pos_x DOUBLE NOT NULL,    pos_y DOUBLE NOT NULL,    normal_speed DOUBLE NOT NULL,    street_speed DOUBLE NOT NULL,    difficult_terrain_speed DOUBLE NOT NULL,    close_combat_range DOUBLE NOT NULL,    ranged_combat_range DOUBLE NOT NULL,    normal_view_distance DOUBLE NOT NULL,    disadvantaged_view_distance DOUBLE NOT NULL,    advantaged_view_distance DOUBLE NOT NULL);CREATE TABLE IF NOT EXISTS ARMY(    id INTEGER,    hq INTEGER,    troop INTEGER,    FOREIGN KEY(hq) REFERENCES TROOP(id),    FOREIGN KEY(troop) REFERENCES TROOP(id),    UNIQUE(hq, troop),    PRIMARY KEY (id, hq, troop));JOOQ一代,我也尝试过unqualifiedSchema = main:        Configuration configuration = new Configuration()                .withGenerator(new Generator()                        .withDatabase(new Database()                                .withName("org.jooq.meta.extensions.ddl.DDLDatabase")                                .withIncludes("ARMY | TROOP")                                .withOutputSchemaToDefault(Boolean.TRUE)                                .withProperties(new Property()                                                .withKey("unqualifiedSchema")                                                .withValue("none"),                                        new Property()                                                .withKey("scripts")
查看完整描述

1 回答

?
浮云间

TA贡献1829条经验 获得超4个赞

根据 jOOQ 3.12,它DDLDatabase会解析您的 SQL 脚本,将它们转换为 H2 并针对内存中的 H2 数据库运行它们,该数据库用作PUBLIC默认模式,从代码生成器的角度来看,所有表现在都位于该数据库中。

SQLite 中不存在这样的模式,这就是您收到所看到的错误的原因。jOOQ 3.12 通过支持一个新属性修复了这个问题unqualifiedSchema,该属性允许在 DDL 脚本中指定所有不合格表的隐含模式。默认情况下,假设这映射到PUBLICH2 中,PUBLIC则假定为“默认模式”。因此,要解决此问题,只需升级到 jOOQ 3.12 即可。

注意:您已经在使用此标志,但没有使用 jOOQ 3.12。该功能在 2011 年 11 月 3 日尚未提供。


查看完整回答
反对 回复 2023-12-13
  • 1 回答
  • 0 关注
  • 110 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信