【问题标题】:Mapping Hibernate映射休眠
【发布时间】:2014-01-05 01:19:23
【问题描述】:

我有两个实体:技术和能力

每个能力可以有 1 个或多个 Techno

所以我已经通过 Hibernate 生成了类

他给了我 3 个班级模型

Technologie
Competence
TechnologieId

现在我对如何添加技术感到困惑

TechnoligieId 的意义何在?

Technologie.java

public class Technologie implements java.io.Serializable {

    private TechnologieId id;
    private Competence competence;
    private String libelleTechnologie;
}

TechnologieId.java

public class TechnologieId implements java.io.Serializable {

    private int idCompetence;
    private int idTechnologie;
}

技术.hbm.xml

 <class name="com.model.Technologie" table="technologie" catalog="gestioncollaborateur">
        <composite-id name="id" class="com.model.TechnologieId">
            <key-property name="idCompetence" type="int">
                <column name="idCompetence" />
            </key-property>
            <key-property name="idTechnologie" type="int">
                <column name="idTechnologie" />
            </key-property>
        </composite-id>
        <many-to-one name="competence" class="com.model.Competence" update="false" insert="false" fetch="select">
            <column name="idCompetence" not-null="true" />
        </many-to-one>
        <property name="libelleTechnologie" type="string">
            <column name="libelleTechnologie" length="254" />
        </property>
    </class>

【问题讨论】:

  • 您有第三个类/表,因为它使用 n:n 映射。现在每种能力都可以拥有多种技术,每种技术都可以拥有多种能力(这对我来说很有意义)
  • 是的,但是我如何添加新的技术,每次我需要创建新的技术时,我需要创建新的技术ID
  • 您是否尝试过添加新的技术?您尝试了什么,什么有效,什么无效?
  • 不,我只需要知道我是否必须为 TechnologieId 创建一个类 Dao 和服务
  • 你能发布表定义吗,你是用 Hibernate 工具生成模型的吗?

标签: java hibernate jakarta-ee


【解决方案1】:

如果问题中正确提及了关系。那你为什么不做这样的事情呢?

public class Technologie implements java.io.Serializable {

private id;
private Competence competence;
private String libelleTechnologie;


@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="<yourForeign Key for Competence>")
public Competence getCompetence() {
    return competence;
}
}

还有 Competence Class 等。

public class Competence implements java.io.Serializable {

private id;
private List<Technologie> technologies;


@OneToMany(fetch = FetchType.LAZY)
@JoinColumn(mappedBy = "<name of the property of Competence in Technology class>")
public List<Technologies> getTechnologies() {
    return technologies;
}
}

此外,如果技术是关系的管理方的话。基本上,这意味着您将对主要处理关系的技术进行保存/更新。

如果您确实希望 @OneToMany 方作为管理方。您必须在 getTechnologies 方法的 @JoinColumn 注释中添加 insertable=false, updatable=false 属性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-27
    • 2011-06-11
    • 2014-12-27
    • 2021-02-02
    相关资源
    最近更新 更多