`
z75148885
  • 浏览: 191614 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Hibernate一对一数据关联:唯一外键关联

阅读更多

Hibernate一对一数据关联:唯一外键关联
一.单向一对一关联
1.数据模型如下图所示:


2.数据表sql
DROPTABLET_User;
DROPTABLET_Group;

CREATETABLET_Group(
id
INTNOTNULLAUTO_INCREMENT
,name
VARCHAR(50)
,
PRIMARYKEY(id)
);

CREATETABLET_User(
id
INTNOTNULLAUTO_INCREMENT
,name
VARCHAR(50)
,age
INT
,group_id
INTNOTNULL
,
PRIMARYKEY(id)
,
INDEX(group_id)
,
CONSTRAINTFK_T_User_1FOREIGNKEY(group_id)
REFERENCEST_Group(id)
);

</DIV>
3.POJO类
TUser.java
packagecom.jeff.wap.bo;

publicclassTUserimplementsjava.io.Serializable{
//Fields
privateIntegerid;
privateIntegerage;
privateStringname;
privateTGroupgroup;


//Constructors

publicIntegergetAge(){
returnage;
}

publicvoidsetAge(Integerage){
this.age=age;
}


publicTGroupgetGroup(){
returngroup;
}

publicvoidsetGroup(TGroupgroup){
this.group=group;
}

/**defaultconstructor*/
publicTUser(){
}

/**constructorwithid*/
publicTUser(Integerid){
this.id=id;
}

//Propertyaccessors

publicIntegergetId(){
returnthis.id;
}

publicvoidsetId(Integerid){
this.id=id;
}

publicStringgetName(){
returnthis.name;
}

publicvoidsetName(Stringname){
this.name=name;
}
}

TGroup.java
packagecom.jeff.wap.bo;

importjava.io.Serializable;

publicclassTGroupimplementsSerializable{

privateIntegerid;
privateStringname;

publicIntegergetId(){
returnid;
}
publicvoidsetId(Integerid){
this.id=id;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}

}
</DIV>
3.配置文件
hibernate.cfg.xml
<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEhibernate-configurationPUBLIC
"-//Hibernate/HibernateConfigurationDTD3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"
>
<hibernate-configuration>
<session-factory>
<propertyname="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<propertyname="hibernate.connection.password">pwd</property>
<propertyname="hibernate.connection.url">jdbc:mysql://localhost:3306/sample</property>
<propertyname="hibernate.connection.username">root</property>
<propertyname="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<mappingresource="com/jeff/wap/bo/TUser.hbm.xml"/>
<mappingresource="com/jeff/wap/bo/TGroup.hbm.xml"/>
</session-factory>
</hibernate-configuration>
</DIV>
TGroup.hbm.xml
<?xmlversion="1.0"?>
<!DOCTYPEhibernate-mappingPUBLIC"-//Hibernate/HibernateMappingDTD3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
>
<hibernate-mapping>
<classname="com.jeff.wap.bo.TGroup"table="T_Group"catalog="sample">
<idname="id"type="integer">
<columnname="id"/>
<generatorclass="native"/>
</id>
<propertyname="name"type="string"column="name"/>
</class>
</hibernate-mapping>
</DIV>
TUser.hbm.xml
<?xmlversion="1.0"?>
<!DOCTYPEhibernate-mappingPUBLIC"-//Hibernate/HibernateMappingDTD3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
>
<hibernate-mapping>
<classname="com.jeff.wap.bo.TUser"table="T_User"catalog="sample">
<idname="id"type="integer">
<columnname="id"/>
<generatorclass="native"/>
</id>
<propertyname="name"type="string">
<columnname="name"length="100"not-null="true"/>
</property>
<propertyname="age"type="java.lang.Integer"column="age"/>
<many-to-onename="group"
class
="com.jeff.wap.bo.TGroup"
column
="group_id"
cascade="all"
unique
="true"
/>
</class>
</hibernate-mapping>
</DIV>
4.测试代码
packagecom.jeff.wap.bo;

importjava.util.List;

importjunit.framework.Assert;
importjunit.framework.TestCase;

importorg.hibernate.HibernateException;
importorg.hibernate.Session;
importorg.hibernate.SessionFactory;
importorg.hibernate.Transaction;
importorg.hibernate.cfg.Configuration;


publicclassHibernateTestextendsTestCase{

Sessionsession=null;

protectedvoidsetUp(){
try{
Configurationconfig=newConfiguration().configure();
SessionFactorysessionFactory=config.buildSessionFactory();
session=sessionFactory.openSession();

}catch(HibernateExceptione){
e.printStackTrace();
}
}

protectedvoidtearDown(){
try{
session.close();
}catch(HibernateExceptione){
e.printStackTrace();
}
}

/**
*对象持久化测试(Insert方法)
*/
publicvoidtestInsert(){
Transactiontran=null;
try{

TUseruser=newTUser();
user.setName("byf");
user.setAge(newInteger(26));

TGroupgroup=newTGroup();
group.setName("Admin");

// 如果在配置文件中没有cascade="all",测试就会报错


tran=session.beginTransaction();
//设置关联
user.setGroup(group);

//插入user信息
session.save(user);
session.flush();
tran.commit();
Assert.assertEquals(user.getId().intValue()>0,true);
}catch(HibernateExceptione){
e.printStackTrace();
Assert.fail(e.getMessage());
if(tran!=null){
try{
tran.rollback();
}catch(Exceptione1){
e1.printStackTrace();
}
}
}
}

/**
*对象读取测试(Select方法)
*/
publicvoidtestSelect(){
Stringhql="fromTUserwherename='byf'";
try{
ListuserList=session.createQuery(hql).list();
TUseruser=(TUser)userList.get(0);
System.out.println("usernameis"+user.getName());
System.out.println("usergroupis"+user.getGroup().getName());
Assert.assertEquals(user.getName(),"byf");
}catch(Exceptione){
e.printStackTrace();
Assert.fail(e.getMessage());
}
}
}

分享到:
评论

相关推荐

    Hibernate一对一唯一外键关联映射(双向关联)

    一、Hibernate一对一关联类型 一对一关联在现实世界中很常见,例如一个人只有一个身份证,一个身份证也只能属于一个人。在数据库设计中,这种关系通常通过主键和外键的方式实现,其中一方的主键作为另一方的外键,...

    hibernate一对一之唯一外键关联(双向关联)

    - 在一对一关联中,唯一外键关联是指在一个实体中定义了另一个实体的主键作为其字段,形成外键约束,确保了数据的一致性和完整性。 3. **双向关联与单向关联** - **单向关联**:只有一方知道另一方的存在,例如...

    Hibernate一对一唯一外键关联映射(单向关联)

    在Java的持久化框架Hibernate中,一对一(One-to-One)关联映射是常见的...以上就是关于Hibernate一对一唯一外键关联映射(单向关联)的详细说明。通过这种方式,我们可以轻松地在Java应用中处理数据库的一对一关系。

    Hibernate 一对一关联映射(主键关联VS唯一外键关联)

    本篇文章将深入探讨两种实现一对一关联的方式:主键关联(Primary Key Join)和唯一外键关联(ForeignKey Join),并结合源码和实际工具进行详细讲解。 一、主键关联(Primary Key Join) 1. 主键关联的概念: ...

    hibernate一对一唯一外键关联映射(单项关联)

    在本案例中,我们将详细探讨“hibernate一对一唯一外键关联映射(单项关联)”。 首先,一对一关联分为两种类型:单向关联和双向关联。单向关联意味着在一个实体类中存在对另一实体的引用,而另一实体类中没有相应...

    hibernate one-to-one 一对一唯一外键关联映射_单向 and 双向

    在本文中,我们将详细介绍Hibernate一对一唯一外键关联映射的概念、配置方法和实践应用。 一对一唯一外键关联映射的概念 在Hibernate中,一对一唯一外键关联映射是指两个实体之间的关联关系,其中一个实体作为外键...

    hibernate一对一唯一外键关联映射(双向关联)

    在一对一关联中,如果使用唯一外键关联,那么一个实体的主键将作为另一实体的外键,同时这个外键在该实体内必须是唯一的。这可以通过在关联字段上使用`@OneToOne`注解并指定`@JoinColumn`来实现。 ### 3. 双向关联 ...

    Hibernate一对一单向外键关联 (联合主键annotation)

    在Hibernate中,一对一关联可以通过`@OneToOne`注解来实现。这个注解可以放在属性上,表示该属性对应另一个实体的实例。外键通常设置在关系的“从属”一方,也就是依赖于其他实体的一方。 对于联合主键,我们需要...

    hibernate外键实现一对一单向关联关系源码

    **一对一关联关系**在数据库设计中表示两个表之间存在唯一的对应关系,例如,一个人可能只有一个护照,或者一个员工只有一个职位。在Hibernate中,这种关系可以通过外键(Foreign Key)在一方或双方实体中实现。 **...

    hibernate一对一之唯一外键关联(单向关联)

    在这个场景下,我们将讨论一种特殊的一对一关联方式——唯一外键关联(Single ForeignKey Association),且为单向关联。这种关联方式意味着在一个实体中有一个字段作为另一个实体的主键引用。 首先,我们需要理解...

    Hibernate 一对一外键单向关联

    首先,一对一外键关联指的是一个实体通过外键直接引用另一个实体的主键。在单向关联中,只有其中一个实体知道另一个实体的存在,而另一个实体则无感知。这种关联通常体现在数据库设计中,比如一个用户只有一个账户,...

    hibernate外键实现一对一双向关联关系源码

    在实际应用中,确保在两个实体类间的一对一关联正确无误非常重要。在创建和更新关联时,应避免循环引用和数据不一致的问题。在保存或更新对象时,需确保在双方都进行了正确的设置。 8. **性能考虑**: 一对一双向...

    hibernate一对一外键关系

    在Hibernate中,实现一对一外键关系有几种方式,包括使用主键关联(Primary Key Association)和使用外键关联(Foreign Key Association)。我们首先来看主键关联: 1. **主键关联**:在这种模式下,一方实体的主键...

    Hibernate Annotation 唯一外键一对一双向关联

    唯一外键是指在一对一关联中,一方的主键同时也作为另一方的外键,确保两个实体共享同一个ID。这可以通过在没有`@JoinColumn`的情况下让两个实体共享相同的主键生成策略来实现。例如,使用`GenerationType.IDENTITY`...

    Hibernate ORM - 一对一外键关联关系

    1. **一对一外键关联配置**:在Hibernate中,可以通过在映射文件中添加`&lt;one-to-one&gt;`标签或在实体类上使用`@OneToOne`注解来定义一对一关联。关联的外键通常位于被引用的实体(“一对一”关系的“一”端)中。 2. ...

    Hibernate关联映射

    连接表通常包含两个外键,分别引用两个参与一对一关联的表。配置上,需要创建一个新的实体类来代表连接表,并在其中定义两个 `many-to-one` 属性,分别对应一对一关联的两个实体。 4. Hibernate 一对多外键单向关联...

    Hibernate关联映射-one to one单向外键关联

    在Hibernate中,一对一关联可以通过配置XML映射文件或者使用注解来实现。我们先来看XML映射文件的例子。假设我们有两个实体,一个是`User`,另一个是`Account`,`User`实体拥有对`Account`的引用。在`User.hbm.xml`...

Global site tag (gtag.js) - Google Analytics