Hibernate Annotation 笔记

Hibernation 默认值
字段(没有尝试过)

@Column(columnDefinition = "tinyint default 0")
在 类 上加

@org.hibernate.annotations.Entity(dynamicUpdate=true,dynamicInsert=true)

会自动判断哪些值为空不再插入,更新语句中
Hibernate 关联映射
OneToOne

表USER、ADDRESS(假设一个用户只有一个地址)

领域模型User、Address

User中有一个连接Address的外键 address_id

@OneToOne

@JoinColumn(name = “address_id”)

private Address address;

如果须要反向,Address中如下设置:

@OneToOne(mappedBy = “address”)

private User user;

OneToMany

表ARTICLE(文章)、ARTICLETYPE(文章类型)

领域模型 Article、ArticleType

备注:class_id为表ARTICLE的外键

ArticleType中设置如下注解:

@OneToMany

@JoinColumn(name = “class_id”, nullable = false)
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;

OneToMany 与 ManyToOne 双向关联

在ManyToOne的配置上再加以下:

@OneToMany(mappedBy = "articleType")

private List<Article> articles;

补充:对OneToMany的双向映射,如果要OneToMany这一端维护关系,你需要删除mappedBy元素并将ManyToOne这端的@JoinColumn的insertable和updatable设置为false,按照Hibernate的官方文档的说法,这种是不太可取的,没有明显的优化,而且还增加了一些附加的UPDATE语句。

单向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
双向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()方法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值