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

如何使用外键将两个表映射到一个实体?

颛孙天宇
2023-03-14
CREATE TABLE CUSTOMER
(
    CUSTOMER_ID INTEGER NOT NULL,
    DETAIL_ID INTEGER NOT NULL,
    PRIMARY KEY( CUSTOMER_ID ),
    CONSTRAINT cust_fk FOREIGN KEY( DETAIL_ID ) REFERENCES DETAILS( DETAIL_ID )
)

CREATE TABLE DETAILS
(
    DETAIL_ID INTEGER NOT NULL,
    OTHER INTEGER NOT NULL,
    PRIMARY KEY( DETAIL_ID )
)
@Entity
@Table(name = "CUSTOMERS")
@SecondaryTable(name = "DETAILS", pkJoinColumns=@PrimaryKeyJoinColumn(name="DETAIL_ID"))
public class Customer {
    @Id
    @GeneratedValue
    @Column(name = "CUSTOMER_ID")
    private Integer id;

   @Column(table = "DETAILS", name = "OTHER")
   private Integer notes;

   // ...
}

@secondarytable(name=“details”,pkjoincolumns=@primarykeyjoincolumn(name=“detail_id”,referencedcolumnname=“detail_id”))

但是当我运行应用程序时,我会得到以下异常:

org.hibernate.mappingException:在org.hibernate.mapping.table(CUSTOMERS)及其相关的超表和辅助表中找不到逻辑名为:DETAIL_ID的列

共有1个答案

郎魁
2023-03-14

对于任何正在寻找答案的人来说,使用@secondarytable不是连接两个具有非主键列的表的方法,因为默认情况下Hibernate会尝试通过主键将这两个表归类;您必须使用@onetomany review http://viralpatel.net/blogs/hibernate-one-to-many-annotation-tutorial/来获得解决方案,以下是url停止工作时的代码片段:

客户类别:

@Entity
@Table(name="CUSTOMERS")
public class Customer {

    @Id
    @GeneratedValue
    @Column(name="CUSTOMER_ID")
    private Integer id;

    @ManyToOne
    @JoinColumn(name="DETAIL_ID")
    private Details details;

    // Getter and Setter methods...
}

详细信息类:

@Entity
@Table(name="DETAILS")
public class Details {

    @Id
    @GeneratedValue
    @Column(name="DETAIL_ID")
    private int detailId;

    @Column(name="OTHER")
    private String other;

    @OneToMany(mappedBy="details")
    private Set<Customer> customers;

    // Getter and Setter methods...
}
Session session = HibernateUtil.getSessionFactory().openSession();
Query query = session.createQuery("select id, details.other from Customer");
 类似资料:
  • 问题内容: 假设我有下表: 我可以使用以下JSON结构在ElasticSearch中轻松映射它: 如果然后有第二个表称为该表在外键中引用,例如: 然后,我将如何在Elasticsearch中映射该关系?是否有一种通用方法可以在Elasticsearch中映射具有一个或多个外键关系的两个表?例如,通过执行特定的join语句? 问题答案: 在SQL世界中,一切都与保持表之间的关系有关,以使数据永远不会

  • 问题内容: 我需要将两个表映射到一个类,但很难弄清楚。一个表是ROOMS,另一个表是TRAINERS。 ROOMS表: 培训人员表: 表应当加入了,和。 ROOMS表的主键是:。TRAINERS表的主键是:。 我需要通过查询这个数据,,,,和。 在SQL中,可能类似于: 我正在项目中其他地方使用ROOMS表,它已经映射为独立对象。是否有一种方法可以将其用作TRAINERS对象的子对象,或者将这两个

  • 我对下面的问题有很大的麻烦。我有一个实体“home”,我在代码中的两个不同位置使用它。问题是,需要根据使用实体的类将其映射到不同的表。 有办法做到我描述的那样吗?

  • 问题内容: 我在MySQL中有两个表,其中第一个表称为用户,第二个表称为游戏。表结构如下。 使用者 id(主要) 电子邮件 密码 真正的名字 游戏 id(主要) user_one_id(外国) user_one_score user_two_id(外国) user_two_score 我的游戏桌在两个用户之间建立了两个外交关系。 我的问题是如何为该表结构建立模型关系?-根据laravel文档,我应

  • 问题内容: 我正在尝试建立一个PostgreSQL表,该表具有两个指向另一个表中相同主键的外键。 运行脚本时出现错误 sqlalchemy.exc.AmbiguousForeignKeysError:无法确定关系Company.stakeholder的父/子表之间的联接条件- 有多个链接表的外键路径。指定“ foreign_keys”参数,提供这些列的列表,这些列应被视为包含对父表的外键引用。 那

  • 我正在学习Hinbernate,所以如果我能将两个类映射到一个DB表,我的想法就被忽略了。 Ex: 虽然这两个类都映射到一个表,但让我们用字符串数据类型的一列来命名Employee。 Hibernate是否能够根据我用于创建的类在表中创建行。还是您认为应该有一个鉴别器列来区分类? 注意:类之间没有继承关系,它们是独立的。