1、 Hibernation 默认值
1) 字段(没有尝试过)
@Column(columnDefinition = "tinyint default 0")
2) 在 类 上加
@org.hibernate.annotations.Entity(dynamicUpdate=true,dynamicInsert=true)
会自动判断哪些值为空不再插入,更新语句中
2、 Hibernate 关联映射
1) OneToOne
表USER、ADDRESS(假设一个用户只有一个地址)
领域模型User、Address
User中有一个连接Address的外键 address_id
@OneToOne
@JoinColumn(name = “address_id”)
private Address address;
//如果须要反向,Address中如下设置:
@OneToOne(mappedBy = “address”)
private User user;
2) OneToMany
表ARTICLE(文章)、ARTICLETYPE(文章类型)
领域模型 Article、ArticleType
备注:class_id为表ARTICLE的外键
ArticleType中设置如下注解:
@OneToMany
@JoinColumn(name = “class_id”, nullable = false)
3) ManyToOne
表ARTICLE(文章)、ARTICLETYPE(文章类型)
领域模型 Article、ArticleType
备注:class_id为表ARTICLE的外键 ,ARTICLETYPE中主键也为class_id
@ManyToOne(cascade = { CascadeType.PERSIST, CascadeType.MERGE }, fetch = FetchType.LAZY, targetEntity = ArticleType.class)
@JoinColumn(name = "class_id")
private ArticleType articleType;
4) OneToMany 与 ManyToOne 双向关联
在ManyToOne的配置上再加以下:
@OneToMany(mappedBy = "articleType")
private List<Article> articles;
补充:对OneToMany的双向映射,如果要OneToMany这一端维护关系,你需要删除mappedBy元素并将ManyToOne这端的@JoinColumn的insertable和updatable设置为false,按照Hibernate的官方文档的说法,这种是不太可取的,没有明显的优化,而且还增加了一些附加的UPDATE语句。
5) 单向ManyToMany
表 USER、ROLE、USER_ROLE
领域模型User、Role
User中在 roles 上方加注解:
@ManyToMany(cascade = { CascadeType.PERSIST, CascadeType.MERGE }, fetch = FetchType.LAZY)
@JoinTable(name = "USERS_ROLES", joinColumns = { @JoinColumn(name = "USER_ID") }, inverseJoinColumns = { @JoinColumn(name = "ROLE_ID") })
private Set<Role> roles = new LinkedHashSet<Role>();
//以下省略getter()、setter()方法
注意:如果集合没有使用范型,必需在@ManyToMany()中再加 targetEntity属性, 如上面加 targetEntity = Role.class
6) 双向ManyToMany
表 USER、ROLE、USER_ROLE
领域模型User、Role
User中在 roles 上方加注解:
@ManyToMany(cascade = { CascadeType.PERSIST, CascadeType.MERGE }, fetch = FetchType.LAZY)
@JoinTable(name = "USERS_ROLES", joinColumns = { @JoinColumn(name = "USER_ID") }, inverseJoinColumns = { @JoinColumn(name = "ROLE_ID") })
private Set<Role> roles = new LinkedHashSet<Role>();
//以下省略getter()、setter()方法
Role为反方,在users上方加注解:
@ManyToMany(mappedBy = "roles")
private Set<User> users = new LinkedHashSet<User>();
//以下省略getter()、setter()方法