黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

兩種方式配置Hibernate復(fù)合主鍵(修正)

系統(tǒng) 2507 0

數(shù)據(jù)庫(kù)結(jié)構(gòu)

create table component(name varchar(50) not null,
?????????????????????? sex varchar(50) not null,
?????????????????????? description varchar(50),
?????????????????????? primary key(name,sex));

?

主鍵類,一定要實(shí)現(xiàn)Serializable接口,并改寫(xiě)equals和hascode方法

?

package ?component;

import ?java.io.Serializable;

import ?org.apache.commons.lang.builder.EqualsBuilder;
import ?org.apache.commons.lang.builder.HashCodeBuilder;

public ? class ?ComponentPK? implements ?Serializable? ... {
??
private ?String?name;
??
private ?String?sex;

public ?String?getName()? ... {
????
return ?name;
}

public ? void ?setName(String?name)? ... {
????
this .name? = ?name;
}

public ?String?getSex()? ... {
????
return ?sex;
}

public ? void ?setSex(String?sex)? ... {
????
this .sex? = ?sex;
}

public ? boolean ?equals(Object?obj)? ... {
????
if (obj? == ? this )? ... {
????????
return ? true ;
????}

????
????
if ( ! (obj? instanceof ?Component))? ... {
????????
return ? false ;
????}

????
????ComponentPK?componentpk?
= ?(ComponentPK)?obj;
????
return ? new ?EqualsBuilder()
??????????.append(
this .name,?componentpk.getName())
??????????.append(
this .sex,?componentpk.getSex())
??????????.isEquals();
????
??}

??
??
public ? int ?hashCode()? ... {
????
return ? new ?HashCodeBuilder()
??????????.append(
this .name)
??????????.append(
this .sex)
??????????.toHashCode();
??}


}

?

?

package ?component;

public ? class ?Component? ... {
??
private ?String?description;
??
private ?ComponentPK?componentpk;
public ?ComponentPK?getComponentpk()? ... {
????
return ?componentpk;
}

public ? void ?setComponentpk(ComponentPK?componentpk)? ... {
????
this .componentpk? = ?componentpk;
}

public ?String?getDescription()? ... {
????
return ?description;
}

public ? void ?setDescription(String?description)? ... {
????
this .description? = ?description;
}

}

?

HBM文件

?

<? xml?version="1.0"?encoding="utf-8" ?>
<! DOCTYPE?hibernate-mapping?PUBLIC?"-//Hibernate/Hibernate?Mapping?DTD?3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
>
<!-- ?
????Mapping?file?autogenerated?by?MyEclipse?-?Hibernate?Tools
-->
< hibernate-mapping? package ="component" > ?

??
< class? name ="Component" ?table ="component" > ?
????
< composite-id? name ="componentpk"
??????????????class
="ComponentPK"
??????????????unsaved-value
="any" >
????????
< key-property? name ="name" ?
????????????????column
="name" ?
????????????????type
="java.lang.String" />
????????
< key-property? name ="sex" ?
????????????????column
="sex" ?
????????????????type
="java.lang.String" />
????
</ composite-id >
????
????
< property? name ="description" ?column ="description" ?type ="java.lang.String" />
??
??
</ class > ?

</ hibernate-mapping >

?

?

測(cè)試代碼:

?

public ? static ? void ?main(String[]?args)? ... {
????????Configuration?cfg
= new ?Configuration();
????????cfg.configure();
????????SessionFactory?sf
= cfg.buildSessionFactory();
????????Session?session
= sf.openSession();
????????Transaction?t
= session.beginTransaction();
????????
????????ComponentPK?pk
= new ?ComponentPK();
????????pk.setName(
" 1 " );
????????pk.setSex(
" 3 " );
????????
????????Component?component
= new ?Component();
????????component.setComponentpk(pk);
????????component.setDescription(
" 12 " );
????????session.save(component);
????????t.commit();
????????System.out.println(
" success " );

????}

?

?

如果組成復(fù)合主鍵的某一個(gè)屬性是其他持久話類的話,則需要使用<key many-to-one>

增加表User:

CREATE TABLE `user` (
? `id` varchar(50) NOT NULL,
? `pass` varchar(50) default NULL,
? PRIMARY KEY? (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;??

增加持久化類User及相應(yīng)的Mapping文件

?

package ?component;

public ? class ?User? ... {
???
private ?String?id;
???
private ?String?pass;
public ?String?getId()? ... {
????
return ?id;
}

public ? void ?setId(String?id)? ... {
????
this .id? = ?id;
}

public ?String?getPass()? ... {
????
return ?pass;
}

public ? void ?setPass(String?pass)? ... {
????
this .pass? = ?pass;
}

}


<?xml?version = " 1.0 " ?encoding = " utf-8 " ?>
<!DOCTYPE?hibernate-mapping?PUBLIC?
" -//Hibernate/Hibernate?Mapping?DTD?3.0//EN "
" http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd " >
<!--?
????Mapping?file?autogenerated?by?MyEclipse?-?Hibernate?Tools
-->
<hibernate-mapping?package
= " component " >?

??<class?name
= " User " ?table = " user " >?
???
????<id?name
= " id " ?column = " id " >
??????<generator?class
= " assigned " ></generator>
????</id>
????<property?name
= " pass " ?column = " pass " ?type = " java.lang.String " />
??
??</class>?

</hibernate-mapping>


修改ComponentPK類

?

package ?component;

import ?java.io.Serializable;

import ?org.apache.commons.lang.builder.EqualsBuilder;
import ?org.apache.commons.lang.builder.HashCodeBuilder;

public ? class ?ComponentPK? implements ?Serializable? ... {
??
private ?String?name;
??
private ?String?sex;
??
private ?User?user;
public ?User?getUser()? ... {
????
return ?user;
}

兩種方式配置Hibernate復(fù)合主鍵(修正)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦?。。?/p>

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論