JPA多对一关系

时间:2018-01-03 11:17:11

标签: java hibernate jpa

我对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实体本身定义此字段/列以获取其值?

1 个答案:

答案 0 :(得分:0)

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

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

如果您想为fk重复列,您可以这样做:

@Column(name = "account_id", insertable=false, updatable=false)
private int account_id;