当前位置: 首页 > 知识库问答 >
问题:

JPA,可嵌入类

姜飞飙
2023-03-14

我想向实体类添加嵌入关系。

在我的数据库中,我有表蛋白质:

+-------------------+------------------+------+-----+---------+----------------+

| Field             | Type             | Null | Key | Default | Extra          |

+-------------------+------------------+------+-----+---------+----------------+

| PID               | int(11) unsigned | NO   | PRI | NULL    | auto_increment |

| uniprot_UniprotAC | char(6)          | YES  | MUL | NULL    |                |

| comment           | int(11) unsigned | YES  | MUL | NULL    |                |

+-------------------+------------------+------+-----+---------+----------------+

和表基准:

+-----------------+--------------------------------+------+-----+---------+-------+
| Field           | Type                           | Null | Key | Default | Extra |
+-----------------+--------------------------------+------+-----+---------+-------+
| ba_type         | varchar(255)                   | YES  |     | NULL    |       |

| target          | int(11) unsigned               | NO   | MUL | NULL    |       |

| rec_diluation   | varchar(255)                   | YES  |     | NULL    |       |

| comment         | text                           | YES  |     | NULL    |       |
+-----------------+--------------------------------+------+-----+---------+-------+

在基准测试中,字段目标是蛋白质表的外键

我已经从蛋白质表中找到了一个名为SupProtein的实体,它运行良好。

现在,我想向基准类添加一个嵌入关系。

这是我的基准课程:

import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Embeddable;

@Embeddable
public class Benchmark implements Serializable {
    @Column(name="ba_type")
    private String type;
    @Column(name="comment")
    private String comment;
    @Column(name="recDilution")
    private String recDilution;  

    public Benchmark(){

    }

        public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getComment() {
        return comment;
    }

    public void setComment(String comment) {
        this.comment = comment;
    }

    public String getRecDilution() {
        return recDilution;
    }

    public void setRecDilution(String recDilution) {
        this.recDilution = recDilution;
    }

}

在我的实体课程中,我添加了:

@Embedded
private Benchmark benchmark; 

但当我尝试构建时,会出现以下错误:

Internal Exception: Exception [EclipseLink-7246] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.ValidationException
Exception Description: The Entity class [class SupEntity.SupProtein] has an embedded attribute [benchmark] of type [class Benchmark] which is NOT an Embeddable class. Probable reason: missing @Embeddable or missing <embeddable> in orm.xml if metadata-complete = true

我没有创建任何ORM. xml文件,在任何地方都找不到。我需要一个orm.xml文件来创建可嵌入的关系还是我的问题?

共有1个答案

鲁德佑
2023-03-14

现在,我想向基准类添加一个嵌入关系。

我认为你的观念是错误的:

@Embedded注释用于指定值为可嵌入类实例的实体的持久字段或属性。默认情况下,@Embeddeble类中指定的列定义适用于所属实体的表

嵌入类不是实体,也不在表中。如果基准是一个表,则必须在类上使用@实体注释。仅当类的某些属性可以视为对象时,才使用可嵌入。

我需要orm吗。xml文件来创建可嵌入的关系,或者我的问题是什么?不,orm。xml不是必需的,也不是用于此目的。

如果您想在类之间建立关系,您应该根据关系的基数使用@OneToOne、@OneTo很多

 类似资料:
  • 问题内容: 我想知道是否有可能在另一个Embeddable中包含Embeddable的ElementCollection? 这是我的供应商实体的示例,该实体具有可嵌入类型的地址列表: 这是我的可嵌入地址,其中包含可嵌入电话的列表 这是嵌入式电话的定义 我目前正在使用JPA 2 + Hibernate 3.6.x对此进行测试 在地址中使用嵌入式电话在我的测试中导致错误。这是最底层的部分调试消息: 删

  • 问题内容: 我想做这样的事情: 对象ReportingFile可以是LogRequest或LogReport文件。(两者结构相同) 一个对象Reporting,其中包含一个logRequest,其中包含带日期的logReport列表。 我试图设置一个EmbededId,这将是logRequest的属性。这就是我遇到的问题。我没有来管理嵌入式ID。(http://docs.jboss.org/hib

  • 问题内容: 我在映射类的嵌入式属性时遇到麻烦。我创建了一些类,这些类与我试图说明的类相似。基本上,我有一个使用继承的@Embeddable类层次结构。顶级类“零件号”只有一个属性,扩展类没有为“零件号”类添加属性,它们仅添加了一些验证/逻辑。 这是我的意思: 部分 零件号 福特PARTNUMBER 高贵的零件编号 当然这是行不通的,因为Hibernate忽略了继承层次结构,并且不喜欢PartNum

  • 问题内容: 我在映射类的嵌入式属性时遇到麻烦。我创建了一些类,这些类与我试图说明的类相似。基本上,我有一个使用继承的@Embeddable类层次结构。顶级类“零件号”仅具有一个属性,扩展类未向“零件号”类添加任何属性,它们仅添加了一些验证/逻辑。 这是我的意思: 部分 零件号 福特PARTNUMBER 高贵的零件编号 当然这是行不通的,因为Hibernate忽略了继承层次结构,并且不喜欢PartN

  • 我想让我的实体中的@Embedded字段“foo”在JPA 2.0中不可更新 如果我有另一个实体而不是@Em的可嵌入,我可以使用@列注释的updatable=false属性,但@Em天呐没有这样的属性 我发现了一个示例,即@Col的(updatable=false)注解直接用在了嵌入式数据库的字段上。 ..但是,如果我将 FooEmbedable 也用于另一个我希望它可以更新的表,会发生什么? 我

  • 我有一个相当典型的场景,其中有一个main@实体,他内部的所有内容都是可嵌入的(因此,没有父实体,内部的所有内容都没有意义)。现在JPA 2.0阻止我在另一个@ElementCollection中定义的@Embeddeble中嵌套一个@ElementCollection: JSR-317 2.6可嵌入类和基本类型的集合包含在元素集合中的可嵌入类(包括另一个可嵌入类中的可嵌入类)不得包含元素集合,也