1.many-to-one
@ManyToOne @JoinColumn(name = "user_id")
2.many-to-many
/** * 双向关联关系中,有且仅有一端是作为主体(owner)端存在的, * 主体端负责维护联接列,对于不需要维护这种关系的从表则通过mappedBy属性进行声明, mappedBy的值指向主体的关联属性. * joinColumns写的都是本表在中间表的外键名称, inverseJoinColumns写的是另一个表在中间表的外键名称。 * mappedBy跟JoinColumn/JoinTable总是处于互斥的一方. fetch=FetchType.EAGER * 立即加载,默认为fetch=FetchType.LAZY 懒惰加载 * * Set<>中使用了泛型,此处也可以不用指定 targetEntity属性。 * */
/** 积分指标项实体--many to many */
private java.util.Set<IntegrationItem> integrationItem = new java.util.HashSet<IntegrationItem>();
@ManyToMany(fetch = FetchType.LAZY) @Cascade(value = org.hibernate.annotations.CascadeType.SAVE_UPDATE) @JoinTable(name = "sem_R_key_proitem", joinColumns = { @JoinColumn(name = "key_person_id") }, inverseJoinColumns = { @JoinColumn(name = "itegration_item_id") }) @OrderBy("id asc") public java.util.Set<IntegrationItem> getIntegrationItem() { return integrationItem; } public void setIntegrationItem( java.util.Set<IntegrationItem> integrationItem) { this.integrationItem = integrationItem; }
/** * mappedBy的值指向主体的关联属性 双向关联关系中,有且仅有一端是作为主体(owner)端存在的, * 主体端负责维护联接列,对于不需要维护这种关系的从表则通过mappedBy属性进行声明, mappedBy的值指向主体的关联属性. * mappedBy="roles" 表示 Authority为主控方,由Role维护Account相关操作。 */
/** 重点人员信息实体--many to many */
private Set<PersonInfo> personInfo = new HashSet<PersonKeyInfo>();
@ManyToMany(targetEntity = com.future.sem.entity.PersonInfo.class, mappedBy = "integrationItem", fetch = FetchType.LAZY) public Set<PersonInfo> getPersonInfo() { return personInfo; }
3.one-to-one
/** * @OneToOne:一对一关联 * mappedBy = "account":这里的一对一配置参考了account * account是RegisteredUser类中的getAccount(), 不是RegisteredUser类中的 * account属性,RegisteredUser类中的OneToOne配置就是在getAccount()方法上面配的. */
@OneToOne(optional=false,mappedBy="account") public RegisteredUser getRegisteredUser() { return registeredUser; }
/** * 双向关联关系中,有且仅有一端是作为主体(owner)端存在的, * 主体端负责维护联接列,对于不需要维护这种关系的从表则通过mappedBy属性进行声明, mappedBy的值指向主体的关联属性 */ // cascade:级联,它可以有有五个值可选,分别是: // * CascadeType.PERSIST:级联新建 // * CascadeType.REMOVE : 级联删除 // * CascadeType.REFRESH:级联刷新 // * CascadeType.MERGE : 级联更新 // * CascadeType.ALL : 以上全部四项 // @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL, targetEntity // = com.future.sem.entity.Account.class) @OneToOne(optional = false, fetch = FetchType.LAZY) @Cascade(value = org.hibernate.annotations.CascadeType.ALL) @JoinColumn(name = "sem_account_id", nullable = true, unique = true) public Account getAccount() { return account; }
单向关联表:在当前的实体中保存personinfo的id,但不对原来的基础表进行任何操作
@OneToOne(optional = false, fetch = FetchType.LAZY) @JoinColumn(name = "person_info_id", unique = true, nullable = false, updatable = false) public PersonInfo getPersonInfo() { return personInfo; }