Hibernate中使用註解對映多對多

2021-10-11 18:49:20 字數 4666 閱讀 4314

在hibernate中,通常配置物件關係對映關係有兩種,一種是基於xml的方式,另一種是基於annotation的註解方式
表:

create

table t_rights (

id number(5)

, name varchar2(50)

constraint t_rights_name_uk unique

constraint t_rights_name_nn not

null

, uri varchar2(

100)

constraint t_rights_uri_uk unique

constraint t_rights_uri_nn not

null

, pos number(2)

, category_id number(5)

,constraint t_rights_id_pk primary

key(id)

,constraint t_rights_category_id_fk foreign

key(category_id)

references t_categories(id));

create

table t_roles (

id number(2)

, name varchar2(50)

constraint t_roles_name_uk unique

constraint t_roles_name_nn not

null

, pos number(2)

,constraint t_roles_id_pk primary

key(id));

create

table t_role_rights (

role_id number(2)

, right_id number(5)

,constraint t_role_rights_role_id_fk foreign

key(role_id)

references t_roles(id)

,constraint t_role_rights_right_id_fk foreign

key(right_id)

references t_rights(id)

,constraint t_role_rights_pk primary

key(role_id,right_id)

);

類:

許可權類:

@entity

@table

(name =

"t_rights"

)public

class

right';

}@id

@genericgenerator

(name=

"mygenerator"

,strategy =

"increment"

)@generatedvalue

( generator =

"mygenerator"

)public integer getid()

public

void

setid

(integer id)

public string getname()

public

void

setname

(string name)

public string geturi()

public

void

seturi

(string uri)

@manytomany()

@jointable

(name=

"t_role_rights"

,joincolumns=

, inversejoincolumns=

) 因為多對多之間會通過一張中間表來維護兩表直接的關係,

所以通過 jointable這個註解來宣告,name就是指定了中間表的名字,

joincolumns是乙個 @joincolumn型別的陣列,表示的是我這方在對方中的外來鍵名稱,

我方是right,所以在對方外來鍵的名稱就是 right_id,

inversejoincolumns也是乙個@joincolumn型別的陣列,

表示的是對方在我這放中的外來鍵名稱,對方是role,所以在我方外來鍵的名稱就是 role_id

public set

getroles()

public

void

setroles

(set

roles)

@column

(name=

"pos"

)//(此屬性要對映到名為pos的列上,若屬性名和列名相同,則註解可以省略)

public

intgetposition()

public

void

setposition

(int position)

}

角色類

@entity

@table

(name =

"t_roles"

)public

class

role';

}@id

@genericgenerator

(name=

"generator"

,strategy =

"increment"

)@generatedvalue

( generator =

"generator"

)public integer getid()

public

void

setid

(integer id)

public string getname()

public

void

setname

(string name)

@column

(name=

"pos"

)public

intgetposition()

public

void

setposition

(int position)

@manytomany

//中間表,兩個外來鍵: joincolumns=指向自己的外來鍵 inversejoincolumns=指向對方的外來鍵

@jointable

(name=

"t_role_rights"

,joincolumns=

, inversejoincolumns=

)public set

getrights()

public

void

setrights

(set

rights)

}

配置檔案:hibernate.cfg.xml

<?xml version="1.0" encoding="utf-8"?>

>

>

name

="hibernate.connection.driver_class"

>

oracle.jdbc.driver.oracledriverproperty

>

name

="hibernate.connection.url"

>

jdbc:oracle:thin:@localhost:1521:t2081property

>

name

="hibernate.connection.username"

>

ayanproperty

>

name

="hibernate.connection.password"

>

qinproperty

>

name

="hibernate.dialect"

>

org.hibernate.dialect.oracle12cdialectproperty

>

name

="hibernate.show_sql"

>

trueproperty

>

name

="hibernate.format_sql"

>

falseproperty

>

class

="com.itlaobing.springdata.entity.right"

/>

class

="com.itlaobing.springdata.entity.role"

/>

session-factory

>

hibernate-configuration

>

Spring動態載入Hibernate對映檔案

近來還在整通用的業務系統框架,採用外掛程式的方式載入需要的配置,之前已實現了spring和struts2配置的動態載入,現在剩下hibernate的對映檔案動態載入還沒實現,於是搜資料查原始碼終於實現之。1 重寫sessionfactory類 新建乙個類,繼承org.springframework....

Hibernate註解對映的使用

hibernate 註解代替對映檔案 hibernate註解 1。entity name entityname 必須,name為可選,對應資料庫中一的個表 2 table name catalog schema 可選,通常和 entity配合使用,只能標註在實體的class定義處,表示實體對應的資料...

Hibernate註解方法使用總結

entity 對映實體類 table 對映數句庫表 entity name tablename 必須,註解 將乙個類宣告為乙個實體bean。屬性 name 可選,對應資料庫中的乙個表。若表名與實體類名相同,則可以省略。table name catalog schema 可選,通常和 entity 配...