有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何从hibernate自动ddl中排除模式

我正在开发spring boot应用程序,该应用程序需要连接PostgresSql数据库,以从模式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注释,我实现了即使表不存在也不创建表,但若数据库中不存在模式,它仍然在创建模式

如何在自动ddl中实现排除模式


共 (1) 个答案

  1. # 1 楼答案

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

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

    @Table(name=“TaskOne”)在表注释中删除schema部分,这样它将签入默认架构(在postgresql中是公共的),如果表和架构不存在,它将不会执行任何操作