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

JPA-为什么我的一对多关系没有出现在数据库中

乜昆
2023-03-14

我正在学习JPA,我有两个实体(Customer和CheckingAccount),其中第一个实体与第二个实体有一对多关系。CheckingAccount是BankAccount类的子类。我正在使用MySQL。

我在测试程序中创建了两个支票账户,并将它们分配给我创建的一个客户。

在我持久化所有内容并检查数据库后,我希望在CheckingAccount表中看到我所做的2行,在Customer表中看到2行,表明该客户有2个支票帐户,但我只看到一行,accounts列的值为“blob”,我希望看到一个帐号。

我不应该在Customer表中看到2行来表示客户有2个支票账户吗?

这是我的客户实体...

package com.gmail.gmjord;

import java.io.Serializable;
import java.lang.String;
import java.util.ArrayList;
import java.util.List;

import javax.persistence.*;

/**
 * Entity implementation class for Entity: Customer
 * 
 */
@Entity
public class Customer implements Serializable {

    @Id
    @GeneratedValue
    private String id;
    @Column(nullable = false)
    private String name;
    @Column(nullable = false)
    private List<BankAccount> accounts;
    @Column(nullable = false)
    private String infoId;
    @Column(nullable = false)
    private String pin;
    private static final long serialVersionUID = 1L;

    public Customer() {
        super();
        accounts = new ArrayList<BankAccount>();
    }

    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAccountsLength() {
        return this.accounts.size();
    }

    public boolean isAccountsNull() {
        if (accounts == null) {
            return true;
        } else {
            return false;
        }
    }

    public List<BankAccount> getAccounts() {
        return accounts;
    }

    public void setAccounts(List<BankAccount> accounts) {
        this.accounts = accounts;
    }

    public String getInfoId() {
        return this.infoId;
    }

    public void setInfoId(String infoId) {
        this.infoId = infoId;
    }

    public String getPin() {
        return this.pin;
    }

    public void setPin(String pin) {
        this.pin = pin;
    }

}

这是我的CheckingAccount实体。。。

package com.gmail.gmjord;

import com.gmail.gmjord.BankAccount;
import java.io.Serializable;
import javax.persistence.*;

/**
 * Entity implementation class for Entity: CheckingAccount
 *
 */
@Entity

public class CheckingAccount extends BankAccount implements Serializable {


    private static final long serialVersionUID = 1L;

    public CheckingAccount() {
        super();
    }

}

这是我的银行账户超类CheckingAccount。。。

package com.gmail.gmjord;

import java.io.Serializable;
import java.lang.String;
import javax.persistence.*;

/**
 * Entity implementation class for Entity: BankAccount
 *
 */
@MappedSuperclass

public abstract class BankAccount implements Serializable {


    @Id
    @Column(nullable=false)
    private String accountNum;
    @Column(nullable=false)
    private String balance;
    @Column(nullable=false)
    private String accountType;
    private static final long serialVersionUID = 1L;

    public BankAccount() {
        super();
    }   
    public String getAccountNum() {
        return this.accountNum;
    }

    public void setAccountNum(String accountNum) {
        this.accountNum = accountNum;
    }   
    public String getBalance() {
        return this.balance;
    }

    public void setBalance(String balance) {
        this.balance = balance;
    }   
    public String getAccountType() {
        return this.accountType;
    }

    public void setAccountType(String accountType) {
        this.accountType = accountType;
    }

}

共有1个答案

林铭
2023-03-14

当您对2个支票账户和一个客户使用“一对多”时,您的数据库中有以下结构(只是一个任意示例-我使用json格式只是为了更好地解释,但将其属性想象为列):

客户=[{id: 1,姓名:安德森先生}]

CheckingAccount=[{id:1,值:$100,id\u客户:1},{id:2,值:$250,id\u客户:1}]

客户表中不需要有两行。当您有一对多关系时,外键位于多关系边表中。

明白了..有意义吗?

 类似资料:
  • 我的问题可能看起来很傻。我是JPA的新手,试图理解它的基本概念。我发现有一种@multi-to-one实体关系可以在那里使用。我的问题是,为什么有人想在拥有“一对多”关系的同时使用它?我的意思是,拥有后一个就足够了解关系并发送查询了,对吗?如果没有,请解释。也许我对这两种关系的看法是完全错误的。请提供一个场景作为示例,以便我更好地理解。谢谢

  • 我希望在消费者和政策这两个实体之间建立一对多关系。一个消费者应该有几个政策。 这是我想要的一个消费JSON对象的例子: 这就是我到目前为止所做的: 政策实体 消费者实体 我想没那么难,但我已经试了几个小时了,还是做不到。我刚到Spring,所以如果有人能帮助我,我会非常感激!

  • 问题内容: 我正在学习Hibernate和JPA,并且一直都在找这个名词。有人可以用一种实用的方式向我解释一下,这个术语是什么,以及它与JPA / Hibernate /数据库的关系? 我想知道这是否是包含任何数据类型的数据结构,但是我不确定是否确实如此。另外,在使用JPA进行的查询中,我不知道它的关系…谁能给我一些启发? 编辑 伙计们,不要沉淀。我已经在Google,字典中(英语),维基百科,社

  • 我有一个实体 定义为 实体 E2 定义为 控制器定义为: (和,是annotated接口,扩展并具有空体)。 当我在调试器中单步执行方法时,我看到在最后两行行之后,和都清除了它们的集合。 基于我在Stack Overflow上发现的其他问题,我尝试将E2定义为 但这于事无补。 原问题(在我尝试测试上面的简化案例之前)我有一个类< code>Robot,定义如下: 和一个类< code>Match类

  • 我在Spring Data JPA中有两个实体: 目标是获取与user\u id相关的所有税款: User.java 税务ayment.jva 我不想要一个太多的注释从User.java和列映射在纳税user_id。 规格等级如下: 根据我获取所有与user\u id相关的税款的目标,规范是正确的还是错误的?

  • 问题内容: 在像mySQL这样的RDBMS数据库中处理多对多关系的最佳方法是什么? 尝试使用数据透视表来跟踪关系,但这会导致以下任一情况: 规范化被抛在后面 空或空的列 您采取了什么方法来支持多对多关系? 问题答案: 在 专门针对该关系 的 表 (有时称为 联结表 )中跟踪多对多关系。该表将该关系建模为指向相反方向的两个一对多关系。 然后,您可以使用联结表通过外键 通过它 联接 其他表 。