首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将多个属性映射到Hibernate中的单个列(UserType似乎不够)

将多个属性映射到Hibernate中的单个列(UserType似乎不够)
EN

Stack Overflow用户
提问于 2014-04-28 16:02:47
回答 1查看 561关注 0票数 0

我们有很多表,它们的列定义如下:

代码语言:javascript
复制
create table tbl_1 (
id int primary key,
   -- ... a lot of specific stuff skipped
reserved_1 char (10), -- byte 1:   flag_A
                      -- byte 2-5: value_B
                      -- byte 6:   flag_C
                      -- byte 7-8: value_D
                      -- byte 9-10: not used 
                      --   flag_A, value_B, flag_C, value_D
                      --   have no relations to each other in general
reserved_2 char(10),  -- ....
);

我想将它映射到类,如下所示:

代码语言:javascript
复制
@Entity
@Table(name = "TBL_1", uniqueConstraints = @UniqueConstraint(columnNames = "ID"))
public class Tbl1 implements java.io.Serializable {
    private int id;
//  irrelevant properties skipped
    private String flagA;
    private String valueB;
    private String flagC;
    private String valueD;
// getters/setters will follow
}

在Hibernate中可能吗?据我所知,可以使用UserType将它们组合成单个列,如下所示(简化):

代码语言:javascript
复制
public class Tbl1 implements java.io.Serializable {
   private int id;
//  irrelevant properties skipped
   private Reserved1 reserved1;
}

public class Reserved1 implements java.io.Serializable {
    private String flagA;
    private String valueB;
    private String flagC;
    private String valueD;
}

但我想隐藏所有对reserved1列/属性的引用,只为flagA、valueB、flagC和valueD宣传getters/setters,因为它们彼此无关,所以将它们组合到类中是一个糟糕的想法,并且为了保持将来(希望)表重组的灵活性。在Hibernate中可能吗?

EN

回答 1

Stack Overflow用户

发布于 2014-05-14 16:23:10

好的,实际上这很简单:只需为fetch、update和insert定义自定义查询:

代码语言:javascript
复制
@SQLUpdate (sql = "UPDATE tbl_1 SET oth_col=?, reserved_1=(substring(?||' ' from 1 for 1) || substring(?||'    ' from 1 for 4) || substring(?||' ' from 1 for 1) || substring(?||'  ' from 1 for 2) where id=?")
@SQLInsert (sql = "define it the same way as update")
@Loader (namedQuery = "tbl_1_ldr")
@NamedNativeQuery (name="tbl_1_ldr", query="SELECT id,..., substring(reserved_1 from 1 for 1) as flag_a, substring(reserved_1 from 2 for 4) as value_b, substring(reserved_1 from 6 for 1) as flag_c, substring(reserved_1 from 7 for 2) as value_d FROM tbl_1 WHERE id = ? ")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23335618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档