hibernate细节3

本文深入解析了ORM框架中mappedBy属性的作用与用法,详细阐述了其在OneToOne、OneToMany及ManyToMany关系中的应用,以及如何避免递归调用问题。通过树状结构设计实例,展示了如何在实体类中正确使用@ManyToOne和@OneToMany注解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mappedBy: 
1>只有OneToOne,OneToMany,ManyToMany上才有mappedBy属性,ManyToOne不存在该属性; 
2>mappedBy标签一定是定义在被拥有方的,他指向拥有方; 
3>mappedBy的含义,应该理解为,拥有方能够自动维护跟被拥有方的关系,当然,如果从被拥有方,通过手工强行来维护拥有方的关系也是可以做到的; 
4>mappedBy跟joinColumn/JoinTable总是处于互斥的一方,可以理解为正是由于拥有方的关联被拥有方的字段存在,拥有方才拥有了被拥有方。mappedBy这方定义JoinColumn/JoinTable总是失效的,不会建立对应的字段或者表。 
5.地址指向谁,谁就是弱势方,即双向时,为了避免递归调用,需要定义主导权的问题,指向的就是不具有主导权的一方,是被拥有方,而另一方会自动维护,作为该方的属性时无法继续向更深层次递归调用。

树状结构
1.2树状结构的设计(重要)
设计思想:数据库模型,面向对象模式,关系映射,CRUD
数据库模型:表(id,name,pid)
实体模型:父结点一对多子结点,一对多/多对一双向关联映射,一个子结点只有一个父结点,一个父结点有多个子结点.
Class Org
private int id;
    private String name;
    private Set<Org> children = new HashSet<Org>();
    private Org parent;
关系映射:在同一个类中使用@ManyToOne和@OneToMany
在父结点parent上
@ManyToOne   
@JoinColumn(name="parent_id")
public Org getParent() {
        return parent;
    }
在子结点children上
@OneToMany(cascade=CascadeType.ALL, mappedBy="parent")//mappedBy指parent属性为关系的维护者,具有主导权,
                                    关系是在指向的属性上建立的,即该不用管理该属性对应生成的设置
                            
public Set<Org> getChildren() {
        return children;
    }
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值