app*_*app 1 java postgresql hibernate spring-data-jpa spring-boot
我正在开发需要与 PostgresSql 数据库连接的 Spring Boot 应用程序,以从架构TaskReads中的TaskOne表读取一些记录,并将一些数据写入架构TaskWrites中的TaskTwo表,因此我已启用创建功能,如果不存在,它是在职的。hibernate.auto.ddlschemastables
问题
现在的问题是我的,因为我的应用程序只是从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;
}
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud)
因此,通过使用@Subselect注释,即使表不存在,我也不会创建表,但如果数据库中不存在模式,它仍然会创建模式。
如何在 auto ddl 中实现排除模式?
您无法直接实现这一点,因为hibernate.auto.ddl启用了整个数据库级别而不是schema级别
@Subselect(value = "")使实体只读并避免创建表。
@Table(name = "TaskOne")在表注释中删除该schema部分,以便它将检查默认模式(在 postgresql 中是公共的),并且如果表和模式不存在,则不会执行任何操作
| 归档时间: |
|
| 查看次数: |
1915 次 |
| 最近记录: |