hibernate 相关问题

1、@Entity 实体类中,如果:

只有属性定义,无setter getter 方法,启动夫妻不会报错,则表中不会创建该字段

有属性定义,有 setter 无 getter ,启动夫妻不会报错,但表中不会创建该字段。

有属性定义,有getter 无 setter ,启动服务器会报错。

结论:有 getter 必有 setter,否则会报错;若无getter,setter 可有可无,都不会报错,但也不会创建表中的该字段。


2、@Transient 注解到某属性的 getter方法上,则该属性对应的字段在表中不会被创建。如果实体中有Set List 等集合属性,不明确指定类型的话是会报错的。此时若在集合属性的getter方法上加上该注解,则不会报错,当然表中也不会创建相应的字段。


3、@manytoone @OneToMany的问题。

如果在one的这一方里面,有many的属性(set list 等)和 getter setter,那么在many的getter上面加 @onetomany,会生成三张表:one  many   one_many(one_id,many_id)

如果在many的这一方面里,有One的属性和getter setter方法,那么在one的 getter上面加 @manytoone,只会生成两张表 one many ,但是注意,many 里面会有一个one_id;

所以,一般情况下,是在多的这一方设置一个manytoone就可以了。


4、cascade 默认是没有的,要显式的设置。 fetch 在多这一方默认是eager的,在一这一方,默认是lazy的。


5、双向的manytoone onetomany,其实是为了可以在任意一方取得对方一方,和数据库方面无关的。如果不是为了这个目的,只在多一方设置一个manytoone就可以了。但是既然这样设置了,就要在一的这一方,标注上onetomany,同时还要标明,双方关系的维护,是在多那一方的,即加上 mappedby="xxx" 来表示这种关系的确立。 

只有OneToOne,OneToMany,ManyToMany上才有mappedBy属性,ManyToOne不存在该属性


6、manytomany 的问题,假设 student  teacher 两张表是该种关系,那么如果在teacher表内设置 manytomany(mappedby="teachers") ,则意味着双方的关系管理交由student表管理(具体表中的teachers属性),这样会生成三张表 student_teacher (student_id,teacher_id)      student(id,name) 和 teacher(id,name) 


生成类似 student_teacher one_many这样的表,应该是谁管理谁在前。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值