如何从hibernate auto ddl中排除模式

问题描述 投票:0回答:1

我正在开发需要连接PostgresSql数据库的Spring启动应用程序,以便从架构TaskReads中的TaskOne表中读取一些记录,并将一些数据写入架构TaskWrites中的TaskTwo表,所以我启用了hibernate.auto.ddl来创建schemastables,如果没有存在并且它正在发挥作用。

问题

现在问题是我的,因为我的应用程序只是从TaskReads模式中的TaskOne表读取数据我不想执行任何ddl命令,即使模式和表不存在。

由于我的应用程序将记录插入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中实现排除模式?

java postgresql hibernate spring-boot spring-data-jpa
1个回答
0
投票

你无法直接实现这一点,因为hibernate.auto.ddl启用了整个数据库级别而不是schema级别

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

@Table(name =“TaskOne”)在表注释中删除schema部分,以便它将检查默认模式(在postgresql中是公共的),如果表和模式不存在则不会执行任何操作

© www.soinside.com 2019 - 2024. All rights reserved.