Jooq 代码生成器警告 'ignroing foreign key'
Jooq code generator warns 'ignroing foreign key'
我用这个脚本生成了一个模式
DROP SCHEMA IF EXISTS test_schema CASCADE;
CREATE SCHEMA test_schema;
SET search_path TO test_schema;
CREATE TABLE accounts
(
user_id SERIAL PRIMARY KEY,
user_name TEXT NOT NULL,
user_email TEXT NOT NULL,
UNIQUE (user_name),
UNIQUE (user_email)
);
CREATE TABLE sessions
(
session_id TEXT PRIMARY KEY,
user_id INT4 NOT NULL REFERENCES accounts (user_id),
session_created_at TIMESTAMP NOT NULL DEFAULT current_timestamp,
session_deleted_at TIMESTAMP NOT NULL DEFAULT 'infinity'
);
然后我用这个schema.xml文件配置了代码生成器
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<configuration>
<!-- Configure the database connection here -->
<jdbc>
<driver>org.postgresql.Driver</driver>
<url>jdbc:postgresql://localhost:7777/mydb</url>
<user>username</user>
<password>password</password>
</jdbc>
<generator>
<database>
<name>org.jooq.util.postgres.PostgresDatabase</name>
<inputSchema>test_schema</inputSchema>
</database>
<generate>
</generate>
<target>
<packageName>com.jooq.gen</packageName>
<directory>../gen</directory>
</target>
</generator>
</configuration>
在命令行中 运行 代码生成器之后,我注意到这条警告消息
Apr 01, 2016 11:48:47 AM org.jooq.tools.JooqLogger info
INFO: Adding foreign key : sessions__sessions_user_id_fkey (test_schema.sessions.user_id) referencing accounts_pkey
Apr 01, 2016 11:48:47 AM org.jooq.tools.JooqLogger warn
WARNING: Ignoring foreign key : sessions__sessions_user_id_fkey (test_schema.sessions.user_id) referencing accounts_pkey references a schema out of scope for jooq-meta: null
Apr 01, 2016 11:48:47 AM org.jooq.tools.JooqLogger warn
WARNING: Ignoring foreign key : sessions__sessions_user_id_fkey (test_schema.sessions.user_id) referencing accounts_pkey references a schema out of scope for jooq-meta: null
虽然我 不会 使用生成的 java 类 到目前为止有任何问题,但我想知道为什么 jooq 生成器发出这个警告以及忽略外键的后果是什么。
想法是,对于扩展到多个模式的数据库设计,将代码生成器设置为不生成所有此类模式可能是错误的,应该让用户意识到这一点。如果其他模式不在代码生成器的范围内,则无法使用外键导航方法(例如 SessionsRecord.fetchParent(SESSIONS_USER_ID_FKEY)
)。
就是这样。因此,您可以安全地忽略该消息。日志级别可能是 a bit excessive.
我用这个脚本生成了一个模式
DROP SCHEMA IF EXISTS test_schema CASCADE;
CREATE SCHEMA test_schema;
SET search_path TO test_schema;
CREATE TABLE accounts
(
user_id SERIAL PRIMARY KEY,
user_name TEXT NOT NULL,
user_email TEXT NOT NULL,
UNIQUE (user_name),
UNIQUE (user_email)
);
CREATE TABLE sessions
(
session_id TEXT PRIMARY KEY,
user_id INT4 NOT NULL REFERENCES accounts (user_id),
session_created_at TIMESTAMP NOT NULL DEFAULT current_timestamp,
session_deleted_at TIMESTAMP NOT NULL DEFAULT 'infinity'
);
然后我用这个schema.xml文件配置了代码生成器
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<configuration>
<!-- Configure the database connection here -->
<jdbc>
<driver>org.postgresql.Driver</driver>
<url>jdbc:postgresql://localhost:7777/mydb</url>
<user>username</user>
<password>password</password>
</jdbc>
<generator>
<database>
<name>org.jooq.util.postgres.PostgresDatabase</name>
<inputSchema>test_schema</inputSchema>
</database>
<generate>
</generate>
<target>
<packageName>com.jooq.gen</packageName>
<directory>../gen</directory>
</target>
</generator>
</configuration>
在命令行中 运行 代码生成器之后,我注意到这条警告消息
Apr 01, 2016 11:48:47 AM org.jooq.tools.JooqLogger info
INFO: Adding foreign key : sessions__sessions_user_id_fkey (test_schema.sessions.user_id) referencing accounts_pkey
Apr 01, 2016 11:48:47 AM org.jooq.tools.JooqLogger warn
WARNING: Ignoring foreign key : sessions__sessions_user_id_fkey (test_schema.sessions.user_id) referencing accounts_pkey references a schema out of scope for jooq-meta: null
Apr 01, 2016 11:48:47 AM org.jooq.tools.JooqLogger warn
WARNING: Ignoring foreign key : sessions__sessions_user_id_fkey (test_schema.sessions.user_id) referencing accounts_pkey references a schema out of scope for jooq-meta: null
虽然我 不会 使用生成的 java 类 到目前为止有任何问题,但我想知道为什么 jooq 生成器发出这个警告以及忽略外键的后果是什么。
想法是,对于扩展到多个模式的数据库设计,将代码生成器设置为不生成所有此类模式可能是错误的,应该让用户意识到这一点。如果其他模式不在代码生成器的范围内,则无法使用外键导航方法(例如 SessionsRecord.fetchParent(SESSIONS_USER_ID_FKEY)
)。
就是这样。因此,您可以安全地忽略该消息。日志级别可能是 a bit excessive.