在jooq中使用DAO时出现DataAccessException

我想使用 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")



动漫人物
浏览 54回答 1
1回答

浮云间

根据 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 日尚未提供。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java