Java 是否将同一表中的多列压缩到一个集合中?

Java 是否将同一表中的多列压缩到一个集合中?,java,hibernate,jpa,orm,spring-data,Java,Hibernate,Jpa,Orm,Spring Data,我是JPA/Hibernate新手,我的情况与本文中描述的类似: 只是我的表包含50个键/值对,我想将其声明为单个对象,然后将所有列压缩到一个集合中(映射也可以)。上述问题的答案描述了如何为列声明自定义命名策略,但我很难将整个过程整合在一起。我希望避免使用具有100(50)个字段的模型,并且无法想象如何准确地声明配对类集合(或映射)来映射50个单独的配对 我试图实现的目标与此类似: 不幸的是,所描述的答案对我不起作用,因为我无法将集合外部化到另一个表中 我的桌子看起来像这样: id串行主键

我是JPA/Hibernate新手,我的情况与本文中描述的类似:

只是我的表包含50个键/值对,我想将其声明为单个对象,然后将所有列压缩到一个集合中(映射也可以)。上述问题的答案描述了如何为列声明自定义命名策略,但我很难将整个过程整合在一起。我希望避免使用具有100(50)个字段的模型,并且无法想象如何准确地声明配对类集合(或映射)来映射50个单独的配对

我试图实现的目标与此类似:

不幸的是,所描述的答案对我不起作用,因为我无法将集合外部化到另一个表中

我的桌子看起来像这样:

id串行主键

名称VARCHAR(255)不为空

键1 BIGINT

值_1 VARCHAR(255)

键2 BIGINT

值_2 VARCHAR(255)

50号钥匙

值_50 VARCHAR(255)

我想将其压缩为以下内容:

@Entity
@Table(name="table")
public class MyModel {

    @Id
    Long id = null;

    @Column(name="name")
    String name;

    Map<K,V> values; //Or a List<MyKeyValuePair> values; 
}
@实体
@表(name=“Table”)
公共类MyModel{
@身份证
长id=null;
@列(name=“name”)
字符串名;
映射值;//或列表值;
}
有什么建议吗


谢谢

那是个糟糕的桌子设计。您应该首先解决的是,是否确实没有固定数量的列,或者您只是希望不必将它们全部映射?我也同意,如果你能控制它,它应该放在另一张桌子上。如果列是固定的,我会将每个列映射出来。然后可以创建另一个方法Map getValues(),并将其注释为@Transient。使用反射或类似的方法构建映射并返回它。很遗憾,我无法更改表结构。@PaulZepernick经过不同的实验后,我将创建一个包含映射列的可嵌入类,并在运行时从该类构造一个临时BeanMap(并接受setter中的一个,从中重构嵌入类)和public仅公开:public BeanMap getValues()public void setValues(BeanMap values)