欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-03-14 08:38:40
...
我们都知道在hibernate中有个foreign的生成主键的方式,这个功能主要是用在主键关联的one-to-one关系,并且我在用hbm文件中配过这种方式,在ejb3/jpa规范中也提供了一个相似功能的annotation的:PrimaryKeyJoinColumn。但是,我在用hibernate中使用这种方式的映射时,发现不起作用,也就是使被影射的对象不会自动获得ID,具体可以参看下面这个示例。
业务逻辑:系统中有多个Employee,每个Employee可以建一个且只能建一个系统用户User,但并不是每个Employee都有User,这里的就是典型的主键映射的one-to-one的关系
具体代码:
Employee.java
hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss @Entity
hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss @Table(name 
= "T_EMPLOYEE")
hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss 
public class Employee implements Serializable ...{
hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss 
hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss     
private String id;
hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss     
private User user;
hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss 
hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss     
public Employee() ...{}
hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss 
hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss     @Id
hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss     @GenericGenerator(name 
= "generator", strategy = "uuid")
hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss     @GeneratedValue(generator 
= "generator")
hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss     @Column(name 
= "ID")
hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss     
public String getId() ...{
hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss         
return this.id;
hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss     }

hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss     
public void setId(String id) ...{
hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss         
this.id = id;
hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss     }

hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss 
hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss     @OneToOne(mappedBy 
= "employee")
hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss     
public User getUser() ...{
hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss         
return user;
hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss     }

hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss     
public void setUser(User user) ...{
hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss         
this.user = user;
hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss     }

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

hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss 
 
User.java
hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss @Entity
hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss @Table(name 
= "T_USER")
hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss 
public class User implements Serializable ...{
hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss 
hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss     
private String id;
hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss     
private Employee employee;
hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss 
hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss     
public User() ...{
hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss     }

hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss 
hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss     
//利用hibernate提供的foreign功能来生成主键方式,这在创建User对象的时候就不需要手动设置User的ID
hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss 
    @Id
hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss     @GenericGenerator(name 
= "generator"
hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss                       strategy 
= "foreign"
hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss                       parameters 
= ...
hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss                         @Parameter(name 
= "property", value = "employee"
hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss                       }
)
hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss     @GeneratedValue(generator 
= "generator")
hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss     @Column(name 
= "ID")
hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss     
public String getId() ...{
hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss         
return id;
hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss     }

hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss     
public void setId(String id) ...{
hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss         
this.id = id;
hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss     }

hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss 
hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss     @OneToOne(cascade 
= CascadeType.PERSIST)
hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss     @PrimaryKeyJoinColumn
hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss     
public Employee getEmployee() ...{
hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss         
return employee;
hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss     }

hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss     
public void setEmployee(Employee employee) ...{
hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss         
this.employee = employee;
hibernate annotation对jpa主键one-to-one映射关系支持的有问题
            
    
    
        HibernateJPAJBoss     }

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

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

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

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

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