JPA多对一关系

问题描述 投票:0回答:1

我有一个关于ManyToOne关系的问题。假设我有2个豆子:

@Entity
@Table(name = "accounts")
public class Account {
     @Id
     @Column(name = "account_id")
     private int account_id;
}


@Entity
@Table(name = "broker_account")
public class BrokerAccount {

    @Id
    @Column(name = "broker_account_id")
    private int broker_account_id;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name="account_id", referencedColumnName = "account_id")
    private Account account;
}

我正在查询下面的实体(普通获取所有查询)

entityManager.createQuery("from BrokerAccount", BrokerAccount.class)

我认为如果我查询BrokerAccount实体,则默认情况下会在Account对象上填充account_id列,因为它也存在于BrokerAccount表中,但是所有Account字段都是空的。

我是否遗漏了一些东西,我是否应该在BrokerAccount实体本身定义此字段/列以获取其值?

java hibernate jpa
1个回答
0
投票

您已将帐户关联定义为@ManyToOne(fetch = FetchType.LAZY)。这意味着在执行entityManager.createQuery("from BrokerAccount", BrokerAccount.class)时,Account将不会加入,并且当时不会获取其数据。

为了使持久性提供程序获取Account数据,您需要在同一事务方法中与引用进行交互,f.e。:brokerAccount.getAccount().getAccountId();

如果你想简单地为fk重复列,你可以这样做:

@Column(name = "account_id", insertable=false, updatable=false)
private int account_id;
© www.soinside.com 2019 - 2024. All rights reserved.