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这样的表,应该是谁管理谁在前。