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

Embeddable和EmbeddedId之间的JPA映射@ManyToOne

宗晟
2023-03-14

我在Spring Boot JPA应用程序中有以下设置:

可嵌入

@Embeddable
public class LogSearchHistoryAttrPK {
    @Column(name = "SEARCH_HISTORY_ID")
    private Integer searchHistoryId;

    @Column(name = "ATTR", length = 50)
    private String attr;

    @ManyToOne
    @JoinColumn(name = "ID")
    private LogSearchHistory logSearchHistory;
    ...
}
@Repository
@Transactional
@Entity
@Table(name = "LOG_SEARCH_HISTORY_ATTR")
public class LogSearchHistoryAttr implements Serializable {
    @EmbeddedId
    private LogSearchHistoryAttrPK primaryKey;

    @Column(name = "VALUE", length = 100)
    private String value;
    ...
}
@Repository
@Transactional
@Entity
@Table(name = "LOG_SEARCH_HISTORY")
public class LogSearchHistory implements Serializable {
    @Id
    @Column(name = "ID", unique = true, nullable = false)
    private Integer id;

    @OneToMany(mappedBy = "logSearchHistory", fetch = FetchType.EAGER)
    private List<LogSearchHistoryAttr> logSearchHistoryAttrs;
    ...
}
CREATE TABLE log_search_history (
    id serial NOT NULL,
    ...
    CONSTRAINT log_search_history_pk PRIMARY KEY (id)
 );

CREATE TABLE log_search_history_attr (
    search_history_id INTEGER NOT NULL,
    attr CHARACTER VARYING(50) NOT NULL,
    value CHARACTER VARYING(100),
    CONSTRAINT log_search_history_attr_pk PRIMARY KEY (search_history_id, attr),
    CONSTRAINT log_search_history_attr_fk1 FOREIGN KEY (search_history_id) REFERENCES
        log_search_history (id)
);

原因:org.hibernate.AnnotationException:mappedBy引用了未知的目标实体属性:com.foobar.entity.logSearchHistoryAttr.logSearchHistoryAttrs中的com.foobar.entity.logSearchHistoryAttr.logSearchHistoryHistors

我不确定为什么我会得到这个错误--映射看起来是正确的(在我看来)。我的地图有什么问题?谢谢!

共有1个答案

徐兴昌
2023-03-14
@OneToMany(mappedBy = "primaryKey.logSearchHistory", fetch = FetchType.EAGER)
private List<LogSearchHistoryAttr> logSearchHistoryAttrs;

您还需要使主键类LogSearchHistoryAttrpk可序列化。

 类似资料:
  • 所以我在网上搜索了我的问题的答案,但没有找到有帮助的东西,基本上是需要在两个类之间有一个ManyToOne关系,其中一个类有一个EmbeddedId,我要把代码留在这里,错误信息是它给(我使用野蝇来运行服务器)。 公共类InventoryPK实现可序列化{ } @实体@Table(name=“inventario”,schema=“mxnextmob”) 公共类库存扩展基本模型{ } 公共类公司扩

  • 问题内容: 我有一个具有以下结构的MySQL数据库(节选): 另外,还有一个USER表,但这并不重要,有了这些表,您可以了解问题的全貌。 如您所见,某些列具有将在类中变为的属性。 并且由于它们与其他表的关系而具有复合主键,因此我无法更改。由于为Composite ,因此映射的类必须具有一个带有相应类的。 问题是我需要在组合的 “本机” 部分中添加一个,例如:必须具有JPA @GeneratedVa

  • 我试图在我的java REST-API中映射openAPI模型(使用Swagger代码生成)和JPA实体(从HiberNate中的数据库模式生成),以便我可以使用JPA(Hibernate)实体将接收到的模型保存到数据库中,并使用模型创建从数据库中获取数据的响应。 我知道我可以分别创建使用模型和实体,并创建一种从一个转换到另一个的机制。然而,如果模型中的数据库或字段有任何变化,我需要更新模型和实体

  • 请求表是这样注释的。 接下来,我有一个包含请求id和注释id表的联接表 现在我有了笔记表,它是普通表。它有自己的@SequenceGenerator 现在,从用户界面,用户可以改变,添加或删除备注的请求。 当我从UI添加新的Note时,我有以下代码。在这里,我已经有了请求Id,但是Notes Id必须生成并保存到Join table(request_note)表,我得到了错误。 我现在的问题或错误

  • 问题内容: 尝试创建组合键(EmbeddedId)时,我遇到了Ebean的问题。 这是我所拥有的草案: 注意 :我正在将Ebean 4.1.4与Java 1.6一起使用。 因此,此代码运行良好,但存在一个我正在尝试解决的问题-数据库中的结果表如下所示: entityB_ID [主要] entityA_FK_ID [主要] 实体A_fk 如您所见,考虑到“ entityA_FK_ID”列,最后一列是

  • 问题内容: 我有一个带有复合键的实体,因此我使用@Embeddable和@EmbeddedId批注。可嵌入类如下所示: 以及使用它的实体: 现在,我想将该实体映射到另一个这样的实体中: 注意 的mappedBy =“id.admin” 是指 管理 字段中 DitaAdminAccountSkillPK 使用 ID 的字段 DitaAdminAccountSkill 。 这样可以编译运行。但是,在e