@Entity public class AccountEntity{ @ManyToOne(fetch = FetchType.EAGER, optiOnal= false) @ascade(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 是否存在 |