【发布时间】:2020-10-14 23:45:21
【问题描述】:
我使用 Hibernate 和 Spring Boot,但遇到以下问题: 我想在 PostgreSQL 中保存我的 Framework 类型的对象:
public class Framework extends BaseEntity {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "sorting_type_id", unique = true)
private FrameworkSortingType frameworkSortingType;
我的FrameworkSortingType 实体:
@Entity(name = "framework_sorting_type")
@Data
@NoArgsConstructor
public class FrameworkSortingType extends BaseEntity {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "environmental_id", referencedColumnName = "id")
private SortingType environmental;
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "social_id", referencedColumnName = "id")
private SortingType social;
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "governance_id", referencedColumnName = "id")
private SortingType governance;
}
还有SortingType实体:
@Entity
@Data
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "sorting_type")
public class SortingType extends BaseEntity {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(name = "type")
private String type;
}
我正在做以下测试 - 在Postman 我想保存这样一个对象(没有 ID 的框架排序类型对象):
{
"id": 335799,
"frameworkSortingType": {
"environmental":{
"type": "alphabetically"
},
"social":{
"type": "numerically"
},
"governance":{
"type": "alphabetically"
}
}
}
我的 SortingType 表只有 2 个常量行:
id type
1 alphabetically
2 numerically
我想在我的FrameworkSortingType 表中只存储SortingType 表的外键ID,但目前我的FrameworkSortingType 中存储了SortingType 表的全新ID,其中添加了新的具有新值的行(并且不应修改 SortingType 表,因为它应该像 ENUM 一样工作,但 -> 已通过添加新行进行了更改):
SortingType 表:
在我的FrameworkSortingType 表中,将全新的 ID 保存到 SortingType 行,而不是像 1 或 2 这样的外键 ID(而不是 751801 应该是 1,因为 SortingType 中的 PK,而不是 751803 应该是2 作为来自SortingType 等的PK):
问题出在哪里?我在哪里犯错了? 也许我应该更改从前端发送的数据?当然,我想发送到后端值,比如“按字母顺序”而不是 ID,因为每个数据库的 ID 可能不同。
编辑
当我从 FrameworkSortingType 实体中删除 cascade=CascadeType.ALL 时,一切都按预期工作,但我更愿意只从前端发送值而不发送 SortingType 表的 ID(在我的情况下,它就像 DB 中的枚举)
【问题讨论】:
-
[按字母顺序,按数字顺序]是来自主表的枚举,即SortingType,这将在启动或手动输入时仅生成一次,您应避免对该表进行任何更新或插入操作。跨度>
标签: postgresql spring-boot hibernate spring-data-jpa