hibernate注解之@Onetomany、@Manytoone、@JoinColumn


@Onetomany用於實體類與數據庫表映射中少的一方,請看下面的例子。

假設一個用戶只有一種角色,用戶和角色是onetomany的關系

用戶實體

@Entity
@Table(name="user")
public class UserEntity implements Serializable{
    
    @Id
    @GenericGenerator(name="generator",strategy="uuid")
    @GeneratedValue(generator="generator")
    @Column(name="id")
    private String id;
    @Column(name="userName")
    private String userName;
    @Column(name="password")
    private String password;
    @Temporal(value=TemporalType.TIMESTAMP)
    private Date createDate;
  ......

角色實體

@Entity
@Table(name="role")
public class RoleEntity implements Serializable{

    @Id
    @GenericGenerator(name="generator",strategy="uuid")
    @GeneratedValue(generator="generator")
    @Column(name="id")
    private String id;
    @Column(name="name")
    private String name;
    @OneToMany(fetch=FetchType.LAZY,cascade=CascadeType.PERSIST)
    private Set<UserEntity> user;

同時設置配置文件為<prop key="hibernate.hbm2ddl.auto">update</prop>

那么在項目啟動后會自動生成三張表,分別是

角色表

用戶表

角色用戶表

@Onetomany 的參數:

mappedBy:用於雙向關聯時使用,否則會引起數據不一致的問題。

fetch:可取的值有FetchType.EAGER和FetchType.LAZY,前者表示主類被加載時加載,后者表示被訪問時才會加載

cascade:CascadeType.PERSIST(級聯新建)、CascadeType.REMOVE(級聯刪除)、CascadeType.REFRESH(級聯刷新)、CascadeType.MERGE(級聯更新)、CascadeType.ALL(選擇全部)

@Manytoone

用於多對一,請看下例,

用戶實體類

@Entity
@Table(name="user")
public class UserEntity implements Serializable{
    @Id
    @GenericGenerator(name="generator",strategy="uuid")
    @GeneratedValue(generator="generator")
    @Column(name="id")
    private String id;
    @Column(name="userName")
    private String userName;
    @Column(name="password")
    private String password;
    @Temporal(value=TemporalType.TIMESTAMP)
    private Date createDate;
    @ManyToOne(cascade=CascadeType.ALL,fetch=FetchType.LAZY,optional=true)
    @JoinColumn(name="roleid",nullable=true)
    private RoleEntity role;

 

這樣在項目啟動后只有兩種表

role表

 

 user表

@Manytoone的參數:optional 屬性是定義該關聯類對是否必須存在,值為false時,關聯類雙方都必須存在,如果關系被維護端不存在,查詢的結果為null。 值為true 時, 關系被維護端可以不存在,查詢的結果仍然會返回關系維護端,在關系維護端中指向關系被維護端的屬性為null。 optional 屬性的默認值是true。

其它屬性與onetomany相同。

@JoinColumn

與@Column用法相同,區別是@JoinColumn作用的屬性必須是實體類

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM