2011-04-11 57 views
0

如果有人知道如何做:我休眠OneToOne与特定条款

有一个实体

@Entity 
public class AnEntity { 
    ... 

    private String propertyA; 
    private String propertyB; 
    private String propertyC; 
} 

和字符串propertyA,propertyB和propertyC存储在不同的表有指向同AnEntity,名称和值字段,是这样的:

@Entity 
public class Property { 
    ... 

    private String name; 
    private String value; 
} 

我可以指定OneToOne加入在AnEntity与where子句中,我想有这样的:

@Entity 
public class AnEntity { 
    ... 
    @OneToOne(table = "properties") 
    @JoinColumn("anentity_id") 
    @WhereJoinTable(name = "propertyA") 
    private String propertyA; 
    ... 
} 

任何帮助,非常感谢!谢谢!

回答

2

我认为最简单的方法是这样:

@Entity 
public class AnEntity { 
    @OneToMany 
    @JoinColumn("aentity_id") 
    @MapKey(name = "name") 
    private Map<String, Property> properties; 
    ... 
    public getPropertyA() { 
     return properties.get("propertyA"); 
    } 
    ... 
} 
+0

的缺点这种方法是巢命名属性。比方说,你想直接在这个实体上公开'收费'地址和'邮寄'地址;你不能。他们会这样暴露:'properties.billing' – 2016-05-04 19:04:58

0

难道你不能为外部表创建一个实体,然后将propertyA,propertyB和properyyC映射为委托给这个表吗?

@Entity 
public class AnEntity { 

    @OneToOne(table = "properties") 
    @JoinColumn("anentity_id") 
    private Property property; 

    public String getPropertyA() { 
     return property.getValueA(); 
    } 
} 

注意:null-checking省略了! :-)