Hibernate entity association, persiste 玩不明白

2023-10-26 22:14:56 +08:00
 bleulucaswu
@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 关联到表里,如果没有两张表都新建,该怎么写代码???

973 次点击
所在节点    Java
3 条回复
chuck1in
2023-10-27 09:28:15 +08:00
hibernate 在使用上心智负担是比较大的,除了映射关系的抽象比较复杂以外,还要理解诸如实体的生命周期,持久化上下文,实体对象与值对象的区分等才能比较好的使用它。
我之前也用了蛮久的 hibernate ,后来换项目很多概念也忘了。建议 op 换个框架试试?现在项目在用 jooq 还挺满意的。
Jrue0011
2023-10-27 10:19:21 +08:00
没用过 Hibernate ,理论上他这种框架既然有自动处理,那应该也会通过某种方式判断存在不存在吧?

比如有没有可能类似加一个注解(看文档里好像有个注解是 NaturalId )标识你这个 type_name 上有唯一索引,以及你的 JoinColumn 注解也加上这个 type_name (同样看文档里有个注解是 JoinColumns ,另外字段上也能加多个 JoinColumn ),然后 Hibernate 就会在创建前先查询下?
Leo666666
2023-10-27 10:32:00 +08:00
你可以把 CardType 主键改成 typeName ,或者是在 Account 中设置 CardType 之前先查询对应的 cardType 是否存在

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/985797

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX