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

按非键属性映射实体列表

司徒泰
2023-03-14
Translation( id, language, text)
StoryChapter (id, chapterTitle)
@Entity
@IdClass(TranslationId.class)
public class Translation {

    @Id
    private long id;

    @Id
    private String language;

    @Lob
    private String text;
    
}

public class TranslationId implements Serializable {

    private long id;
    private String language;

}


@Entity
public class StoryChapter {

    @Id
    private int id;

    @ManyToMany
    @JoinColumn(
            name = "chapter_title",
            referencedColumnName = "id"
    )
    private List<Translation> chapterTitle;

}

我对此代码的唯一关注是,它需要一个新表来连接StoryChapterTranslation,我希望避免这种行为(但如果确实不可能的话,就继续执行它)。

使用OneTomany也是不可行的,因为它需要Translation表中的其他列,而且这个表稍后将被许多其他实体使用。

因此,使用数据示例,如果在我的translation表中有一个have:

在Java中,我的chaptertitle列表应该有两个条目(可用的两种语言)。

这种行为在JPA中可能吗?

解决方案

    private long chapterTitle;

    @OneToMany
    @JoinColumn(name = "id", referencedColumnName = "chapterTitle")
    private Set<Translation> chapterTitles;
StoryChapter cannot be cast to class java.io.Serializable
failed to lazily initialize a collection of role: StoryChapter.chapterTitles, could not initialize proxy - no Session

现在一切都按预期工作。

共有1个答案

陆宏扬
2023-03-14

翻译表看起来是一个通用的文本翻译,可以从多个实体引用。StoryChapter和Translation之间的这种关系是单向的、一对多的,在JPA上是支持的。

故事章节可以引用一个翻译的集合:

    @OneToMany
    @JoinColumn(name = "id", referencedColumnName = "chapterTitle")
    private Set<Translation> chapterTitle;

其他使用转换表的实体也可以这样做。

 类似资料:
  • 问题内容: 我的PostgreSQL数据库(9.2)中有一个表,其中的列类型为JSON。我很难将此列映射到“ JPA2实体”字段类型。 我尝试使用String,但是当我保存实体时,出现一个异常,即它无法将字符转换为JSON。 处理JSON列时使用的正确值类型是什么? 一个简单的解决方法是定义一个文本列。 问题答案: 请参阅PgJDBC错误#265。 PostgreSQL过于严格,对数据类型转换非常

  • 我目前正在尝试使用ModelMapper的映射方法执行实体到DTO的映射。在最深的属性映射上,映射结果为null,但它应该是一个对象。 以下是我的映射源实体(省略brevety的Loombok getter和setter): 以下是我的目标DTO(省略brevety的Loombok Getter和Setter): 在我的Controller类方法上,我这样做映射: My clientService

  • 问题内容: 在我的项目中,我使用Entity Framework6。我有以下实体: 和 当我插入一个填充了PersonRights的人员对象时,它在数据库中看起来像这样: 人员实体表: PersonRights实体表 当我从数据库加载人时,它没有填充PersonRights属性,这是因为virtual关键字具有延迟加载功能-可以。 然后我得到了person对象的PersonRights,它也可以正

  • > 状态: } 我在控制台得到的是: 或在创建类时 在这种情况下,如何正确创建实体或在表之间创建引用?

  • Hi编写Spring应用程序,使用Spring Security。这是我的用户和帐户角色数据库: 我的实体类: 当我尝试登录我的系统我有错误: Hibernate:选择userrolese0_. username作为username3_1_0_,userrolese0_. id作为id1_0_0_,userrolese0_. id作为id1_0_1_,userrolese0_. name作为nam

  • 我有5个班叫 1.Reqest->与请求表映射 2.Team->与Team表映射 假设我创建了一个bean类,如下所示。 现在,由于我已经用Java类映射了所有表,所以我可以使用hql联接查询来获取数据。 我不想在连接中使用纯SQL查询,然后手动将结果Object[]列表从hibernate查询和存根数据迭代到SummaryBean中。 我的问题是我如何使hibernate将那个查询的结果映射到S