hibernate annotation对jpa主键one-to-one映射关系支持的有问题

我们都知道在hibernate中有个foreign的生成主键的方式,这个功能主要是用在主键关联的one-to-one关系,并且我在用hbm文件中配过这种方式,在ejb3/jpa规范中也提供了一个相似功能的annotation的:PrimaryKeyJoinColumn。但是,我在用hibernate中使用这种方式的映射时,发现不起作用,也就是使被影射的对象不会自动获得ID,具体可以参看下面这个示例。
业务逻辑:系统中有多个Employee,每个Employee可以建一个且只能建一个系统用户User,但并不是每个Employee都有User,这里的就是典型的主键映射的one-to-one的关系
具体代码:
Employee.java
@Entity
@Table(name
= " T_EMPLOYEE " )
public class Employee implements Serializable ... {

privateStringid;
privateUseruser;

publicEmployee()...{}

@Id
@GenericGenerator(name
="generator",strategy="uuid")
@GeneratedValue(generator
="generator")
@Column(name
="ID")
publicStringgetId()...{
returnthis.id;
}

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


@OneToOne(mappedBy
="employee")
publicUsergetUser()...{
returnuser;
}

publicvoidsetUser(Useruser)...{
this.user=user;
}

}


User.java
@Entity
@Table(name
= " T_USER " )
public class User implements Serializable ... {

privateStringid;
privateEmployeeemployee;

publicUser()...{
}


//利用hibernate提供的foreign功能来生成主键方式,这在创建User对象的时候就不需要手动设置User的ID
@Id
@GenericGenerator(name
="generator",
strategy
="foreign"
,
parameters
=...
{
@Parameter(name
="property",value="employee"
)
}
)
@GeneratedValue(generator
="generator"
)
@Column(name
="ID")
publicStringgetId()...{
returnid;
}

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


@OneToOne(cascade
=CascadeType.PERSIST)
@PrimaryKeyJoinColumn
publicEmployeegetEmployee()...{
returnemployee;
}

publicvoidsetEmployee(Employeeemployee)...{
this.employee=employee;
}

}

由于@PrimaryKeyJoinColumn不起作用,我只能用在User的ID上使用foreign主键生成器

在hibernate的官方jira上也有人提过这个问题(http://jira.jboss.com/jira/browse/HIBERNATE-73),不过好像没人响应,大家可以去看看

以上环境是:hibenrate3.2.4.sp1,hibernate-annotations-3.3.0.GA

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值