【问题标题】:Hibernate Composite Primary KeyHibernate 复合主键
【发布时间】:2015-05-25 13:18:12
【问题描述】:

我在使用休眠注释时遇到了一些问题。我这里有一些方案:

feature_map

  1. module_name (PK) (FK m_module_fk)
  2. feature_code (PK) (FK m_feature_fk)

表格模块

  1. module_name (PK)

表格功能

  1. feature_code (PK)

我已经从休眠和其他网站尝试了几种方法,但没有成功。 有谁能帮帮我吗?

已编辑

对不起,我没有告诉你所有的代码。我的意思是,我请您帮助使用您自己的代码将其生成为休眠注释代码。对不起,这是我的错误。我有一个正确的,我昨晚找到了。 CMIIW。

下面是我的代码:

FeatureMap.class

@Entity
@Table(name = "M_FEATURE_MAP")
@IdClass(FeatureMapPk.class)
public class FeatureMap implements Serializable {

    @Id
    @Column(name = "module_name")
    private String moduleName;

    @Id
    @Column(name = "feature_code")
    private String featureCode;

    @MapsId("moduleName")
    @OneToOne
    @JoinColumn(name = "module_name", referencedColumnName = "module_name",
            insertable = false, updatable = false)
    private Module module;

    @MapsId("featureCode")
    @OneToOne
    @JoinColumn(name = "feature_code", referencedColumnName = "feature_code",
            insertable = false, updatable = false)
    private Feature feature;

    /*Getter Setter, hash equals and toString*/
}

FeatureMapPk.class

public class FeatureMapPk implements Serializable {

    private String moduleName;
    private String featureCode;

    public FeatureMapPk(){

    }

    public FeatureMapPk(String moduleName, String featureCode){
        this.moduleName = moduleName;
        this.featureCode = featureCode;
    }

    /*Getter Setter, hash equals and toString*/
}

模块类

@Entity
@Table(name = "M_MODULE")
public class Module implements Serializable {

    @Id
    @Column(name = "module_name")
    private String moduleName;

    @JsonIgnore
    @OneToOne(fetch = FetchType.LAZY, mappedBy = "module")
    private FeatureMap featureMap;

    /*Getter Setter, hash equals and toString*/
}

Feature.class

@Entity
@Table(name = "M_FEATURE")
public class Feature implements Serializable {

    @Id
    @Column(name = "feature_code")
    private String featureCode;

    @JsonIgnore
    @OneToOne(fetch = FetchType.LAZY, mappedBy = "feature")
    private FeatureMap featureMap;

    /*Getter Setter, hash equals and toString*/
}

非常感谢您的回答:) 在我犯错之前,我很抱歉。

【问题讨论】:

  • 您遇到了一些问题,但不要说您尝试了注释的什么用途以及结果如何。不要说“它不起作用”,这应该是什么意思,你希望人们能够从没有信息的情况下告诉你什么?
  • 如果您的 FutureMap 除了键和模块/映射的属性之外没有任何其他属性(在您的代码中没有其他属性),那么您根本不需要它。它只是一个连接表,将由 JPA 为您处理。 en.wikibooks.org/wiki/Java_Persistence/… 另外你确定模块和特性之间只有OneToOne(一个模块一个特性,不多),就像你当前的代码一样。
  • 是的,感谢@zielu 的建议。我在 FutureMap.class 中有另一个属性。我确定这是一对一的关系。因为futureMap会变成一个实体,而不仅仅是多对多关系生成的表。

标签: java spring hibernate postgresql jpa


【解决方案1】:

我们如何在不查看您的代码、您尝试过的几种方法以及实际架构而不仅仅是主键的情况下提供实际帮助。

尽管如此,您很可能对组合键不感兴趣,而是对 Module 和 Feature 中的简单 OneToMany 或 ManyToMany 映射感兴趣,而对 FeatureMap 没有实体。

【讨论】:

    猜你喜欢
    • 2018-01-07
    • 2011-08-01
    • 2018-02-02
    • 1970-01-01
    • 2020-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多