Hibernate Annotation 笔记

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()方法
		 

你可能感兴趣的:(java,Hibernate,领域模型)