Java 使用Cayenne从具有多个架构的Postgress数据库生成类
我有一个带有多个模式的PostgreSQL数据库,我正在使用ApacheCayenne生成Java类。问题是cayenne跳过了不同模式表上的外键。例如: 表Java 使用Cayenne从具有多个架构的Postgress数据库生成类,java,postgresql,apache-cayenne,Java,Postgresql,Apache Cayenne,我有一个带有多个模式的PostgreSQL数据库,我正在使用ApacheCayenne生成Java类。问题是cayenne跳过了不同模式表上的外键。例如: 表schema\u b.booking引用了schema\u a.my\u user: create table schema_b.booking ( id bigserial not null constraint booking_pkey primary key, address_id integer not null c
schema\u b.booking
引用了schema\u a.my\u user
:
create table schema_b.booking
(
id bigserial not null constraint booking_pkey primary key,
address_id integer not null constraint cde_fk references schema_b.address
...,
created_by integer not null constraint abc_fk references schema_a.my_user
);
生成的Java类如下所示:
class Booking {
private Long id;
private Address addressId; //this is OK
private Integer createdBy; //NOT OK (Integer instead of MyUser)
}
控制台日志为不同架构中的每个FK显示此项:
[INFO] Skip relation: 'null.schema_a.my_user.id <- null.schema_b.booking.created_by # 1' because it related to objects from other catalog/schema
[INFO] relation primary key: 'null.schema_a'
[INFO] primary key entity: 'null.schema_a'
[INFO] relation foreign key: 'null.schema_b'
[INFO] foreign key entity: 'null.schema_b'
[INFO]跳过关系:“null.schema\u a.my\u user.id您是对的,Cayenne只跳过跨架构关系。
这看起来像是一个应该取消的过时限制
如果只执行一次,则可以在Cayenne Modeler中添加这些缺失的关系。如果您需要定期将Cayenne车型与数据库同步,则很难克服此问题。
一个选项是完全跳过关系加载(),并手动创建它们(或使用Modeler中的“推断关系”工具)。在这种情况下,所有其他内容(表和列)应该可以很好地同步。另一个选择是等待4.1.M2版本的Cayenne,我相信它很快就会准备好(虽然没有确切的日期)谢谢!嗯,我需要定期同步;我将尝试使用Modeler来推断关系。为了澄清,4.1.M2将能够生成跨模式关系?欢迎您!我真的认为,这是一个需要跟踪的问题: