在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 配...