gpt4 book ai didi

java - 从 3 个表定义 hibernate 实体

转载 作者:行者123 更新时间:2023-11-29 10:38:34 24 4
gpt4 key购买 nike

我正在开发一个遗留应用程序,我被要求集成 Hibernate(这是我第一次使用它)。该应用程序有 3 个表(其中包括),如下所示:

Table SITE             Table PARAMS        Table TRANS
========== ============== ===============
pk: id (INT) pk: p_id (INT) pk: t_id (INT)
lang_id (INT) name (CHAR) fk: p_id (INT)
value (INT) fk: lang_id (INT)
text (CHAR)

然后,我需要根据为应用程序定义的语言(存储在 SITE 中)从 PARAMS 获取参数及其翻译(存储在 TRANS 中)。

我一直在努力尝试了解如何连接表以获取实体的数据。我尝试使用 @JoinTable,但我不知道如何进行 3 路连接,因此我开始尝试使用 @SecondaryTables,但运气不佳。

我定义了这个实体来映射请求的数据(我知道这不会像现在这样工作),并且我正在尝试找出进行连接的正确方法。

@Entity
@Table(name = "params")
@SecondaryTables(
{
@SecondaryTable(name = "trans", pkJoinColumns = @PrimaryKeyJoinColumn(name = "p_id")),
})
public class Tparam implements Serializable
{
@Id
@GeneratedValue
@Column(name = "p_id")
private int id;

@Column(name = "name")
private String Name;

@Column(name = "text")
private String visibleText

...
}

感谢任何帮助!

<小时/>

作为引用,这个 SQL 查询给了我我想要的:

SELECT * FROM params, lang, site WHERE params.p_id = lang.p_id AND lang.lang_id = site.lang_id;

最佳答案

您需要定义 3 个实体:

1-参数2-郎3-站点

@Entity
@Table(name = "params")
public class Tparam implements Serializable
{
@Id
@GeneratedValue
@Column(name = "p_id")
private int id;

@Column(name = "name")
private String Name;

@Column(name = "text")
private String visibleText

...
}

@Entity
@Table(name = "lang")
public class Lang implements Serializable
{
@Id
@GeneratedValue
@Column(name = "lang_id")
private int id;

@ManyToOne
@JoinColumn(name = "p_id")
private Tparam param;

...
}

@Entity
@Table(name = "site")
public class Site implements Serializable
{
@Id
@GeneratedValue
@Column(name = "site_id")
private int id;


@ManyToOne
@JoinColumn(name = "lang_id")
private Lang lang

...
}

然后,当您需要数据时,可以在 Site 实体上使用 Criteria(或查询)来获取数据。 site的每条记录包含一个Lang,每条记录包含一个Tparam

关于java - 从 3 个表定义 hibernate 实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45965040/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com