Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将多个属性映射到Hibernate中的单个列(UserType似乎不够)_Java_Hibernate_Mapping_Usertype - Fatal编程技术网

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

Java 将多个属性映射到Hibernate中的单个列(UserType似乎不够),java,hibernate,mapping,usertype,Java,Hibernate,Mapping,Usertype,我们有很多表的列定义如下: 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 -- b

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

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),  -- ....
);
我想将其映射到类,如下所示:

@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
}
在冬眠状态下可能吗?据我所知,这是可能的 要将它们组合成具有UserType的单个列,如下所示(简化):

但我想隐藏对reserved1列/属性的所有引用 以及宣传flagA、valueB、flagC、valueD only的getter/setter 彼此无关,所以合并到课堂上是个坏主意,而 为将来(希望)的表重组保持灵活性。可能吗
在Hibernate中?

好的,实际上很简单:只需定义用于获取、更新和插入的自定义查询:

@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 = ? ")
@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 = ? ")