java如何从hibernate自动ddl中排除模式
我正在开发spring boot应用程序,该应用程序需要连接PostgresSql数据库,以从模式TaskReads中的TaskOne表读取一些记录,并将一些数据写入模式TaskWrites中的TaskTwo表,因此,我已经启用了hibernate.auto.ddl
来创建schemas
和tables
(如果不存在并且正在工作的话)
问题
现在的问题是我的,因为我的应用程序只是从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 楼答案
您无法直接实现这一点,因为
hibernate.auto.ddl
是在整个数据库级别启用的,而不是在schema
级别启用的@Subselect(value=”“)将实体设置为只读,避免创建表
@Table(name=“TaskOne”)在表注释中删除
schema
部分,这样它将签入默认架构(在postgresql中是公共的),如果表和架构不存在,它将不会执行任何操作