@Entity
public class AccountEntity{
@ManyToOne(fetch = FetchType.EAGER, optional = false)
@Cascade(CascadeType.ALL)
@JoinColumn(name = COLUMN_TYPEID_NAME, referencedColumnName = CardTypeEntity.COLUMN_ID_NAME, unique = true)
private CardTypeEntity cardTypeEntity;
}
@Entity
public class CardTypeEntity {
@Column(name = COLUMN_TYPENAME_NAME, nullable = false)
@NotNull
@NotBlank
private String typeName;
}
我想做一个每次插入一个新纪录,如果关联的 type 有那就只插入 account 且把 type_id 关联到表里,如果没有两张表都新建,该怎么写代码???
1
chuck1in 2023-10-27 09:28:15 +08:00
hibernate 在使用上心智负担是比较大的,除了映射关系的抽象比较复杂以外,还要理解诸如实体的生命周期,持久化上下文,实体对象与值对象的区分等才能比较好的使用它。
我之前也用了蛮久的 hibernate ,后来换项目很多概念也忘了。建议 op 换个框架试试?现在项目在用 jooq 还挺满意的。 |
2
Jrue0011 2023-10-27 10:19:21 +08:00
没用过 Hibernate ,理论上他这种框架既然有自动处理,那应该也会通过某种方式判断存在不存在吧?
比如有没有可能类似加一个注解(看文档里好像有个注解是 NaturalId )标识你这个 type_name 上有唯一索引,以及你的 JoinColumn 注解也加上这个 type_name (同样看文档里有个注解是 JoinColumns ,另外字段上也能加多个 JoinColumn ),然后 Hibernate 就会在创建前先查询下? |
3
Leo666666 2023-10-27 10:32:00 +08:00
你可以把 CardType 主键改成 typeName ,或者是在 Account 中设置 CardType 之前先查询对应的 cardType 是否存在
|