gpt4 book ai didi

java - 如何从 hibernate auto ddl 中排除架构

转载 作者:行者123 更新时间:2023-12-02 10:07:36 25 4
gpt4 key购买 nike

我正在开发 Spring Boot 应用程序,该应用程序需要与 PostgresSql 数据库连接,以从架构 TaskReads 中的 TaskOne 表中读取一些记录,并将一些数据写入 <模式TaskWrites中的strong>TaskTwo表,因此我启用了hibernate.auto.ddl来创建模式 如果不存在并且它正在工作。

问题

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

最佳答案

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

@Subselect(value = "") 使实体只读并避免创建表。

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

关于java - 如何从 hibernate auto ddl 中排除架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55230662/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com