mysql - Hibernate:在一个数据库表行中存储固定长度的数组

标签 mysql arrays hibernate

我一直在尝试找到一种解决方案,将固定长度数组存储为使用 hibernate 的对象的属性,该对象与不使用 BLOB 数组的对象位于同一数据库表中。

我目前有一个 ProductionQCSession 类,看起来像

@Entity
public class ProductionQCSession extends IdEntity {

    private Long id;
    private Float velocity;
    private Float velocityTarget;
    private Float[] velocityProfile;

    public ProductionQCSession() {
    }

    @Id @GeneratedValue(strategy=GenerationType.AUTO)
    @Override
    public Long getId() {
        return id;
    }

    @SuppressWarnings("unused")
    public void setId(Long id) {
        this.id = id;
    }

    @Basic
    public Float getVelocity() {
        return velocity;
    }

    public void setVelocity(Float velocity) {
        this.velocity = velocity;
    }

    @Basic
    public Float[] getVelocityProfile() {
        return velocityProfile;
    }

    public void setVelocityProfile(Float[] velocityProfile) {
        this.velocityProfile = velocityProfile;
    }
}

理想情况下,我希望数据库结构是

id|velocity|VPValue0|VPValue1|VPValue2|VPValue3|...    
21|     2.1|     0.1|     0.2|    -0.1|     0.3|...

我非常肯定地知道,velocityProfile 数组中始终有 15 个项目,并且这些值与对象的任何其他属性一样多,因此我认为将它们添加到数据库表模式是有意义的,如果这是可能的。我更喜欢这种方式,因为只需进行原始表格打印就可以轻松获得数据的概述。

当前代码仅将数组数据存储为 BLOB。

我看过http://ndpsoftware.com/HibernateMappingCheatSheet.html映射备忘单,但似乎找不到任何好的解决方案。

我只是想做一些别人不会做的事情?

最佳答案

本质上,您正在尝试拥有一个多值字段,这不是关系数据库概念。标准化的解决方案会将它们放入子表中,Hibernate 将允许您直接从父行访问该子表(并将其作为集合返回)。

如果您坚持认为它应该在一个表中,那么您需要创建 15 个单独的列......并希望将来您不会突然需要 16 个列。

关于mysql - Hibernate:在一个数据库表行中存储固定长度的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29750087/

相关文章:

c# - 使用 Slite.net-PCL 进行 Xamarin Forms 的简单查询

php - 按照他们发送或接收的最新消息的顺序选择人员

redmine - MYSQL优化一个137000行的表

java - 级联在 hibernate 模式下无法正常工作

java - Tomcat : 404 The requested resource is not available

php - 未配置 SQL 方言 (Phpstorm)

c++ - 多维数组计算

C++ 从指定范围内的文件中读取数组

javascript - 循环返回非常长的数组,即使它循环了 3 次?

database - 我的 H2/C3PO/Hibernate 设置似乎没有保留准备好的语句?