如何从Hibernate Auto DDL中排除架构

时间:2019-03-18 22:00:14

标签: java postgresql hibernate spring-boot spring-data-jpa

我正在开发需要与PostgresSql数据库连接以从架构 TaskReads 中的 TaskOne 表读取一些记录并将其写入<模式 TaskWrites 中的strong> TaskTwo 表,因此我已启用hibernate.auto.ddl创建schemastables(如果不存在,并且可以正常工作)。

问题

现在的问题是我的,因为我的应用程序只是从 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中实现排除架构?

1 个答案:

答案 0 :(得分:1)

由于hibernate.auto.ddl是在整个数据库级别而不是schema级别启用的,因此无法直接实现

@Subselect(value =“”)将实体设置为只读,并避免创建表。

@Table(name =“ TaskOne”)在表注释中,删除schema部分,以便它将检入默认模式(在PostgreSQL中是公共的),而不会如果表和架构不存在,仍然做任何事情