我正在开发需要与PostgresSql数据库连接以从架构 TaskReads 中的 TaskOne 表读取一些记录并将其写入<模式 TaskWrites 中的strong> TaskTwo 表,因此我已启用hibernate.auto.ddl
创建schemas
和tables
(如果不存在,并且可以正常工作)。>
问题
现在的问题是我的,因为我的应用程序只是从 TaskReads 架构中的 TaskOne 表中读取数据,即使架构和表是不存在。
并且由于我的应用程序将记录插入到 TaskWrites 模式的 TaskTwo 表中,因此我负责创建模式和表(如果不存在)。
TaskTwo 实体,仅读取数据
@Entity
@Table(name = "TaskOne", schema = "TaskReads")
@Setter
@Getter
@NoArgsConstructor
@AllArgsConstructor
@Subselect(value = "")
@Immutable
public class TaskOneEntity {
@Column(name = "task_id")
@Id
private Long taskId;
}
TaskTwo 实体将数据写入表
@Entity
@Table(name = "TaskTwo", schema = "TaskWrites")
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@ToString
@Accessors(chain = true)
public class TaskTwoEntity {
@Column(name = "task_id")
@Id
private long taskId;
}
因此,通过使用@Subselect
批注,我实现了不创建表(即使它不存在),但是如果数据库中不存在模式,它仍在创建模式。
如何在auto ddl中实现排除架构?
答案 0 :(得分:1)
由于hibernate.auto.ddl
是在整个数据库级别而不是schema
级别启用的,因此无法直接实现
@Subselect(value =“”)将实体设置为只读,并避免创建表。
@Table(name =“ TaskOne”)在表注释中,删除schema
部分,以便它将检入默认模式(在PostgreSQL中是公共的),而不会如果表和架构不存在,仍然做任何事情