【问题标题】:JPA, OneToMany and ManyToOneJPA、OneToMany 和 ManyToOne
【发布时间】:2016-11-14 11:28:43
【问题描述】:

我正在使用 JPA 从数据库中查询数据。我得到了:

@Entity
@Table(name = "supporter_1")
public class Supporter{

    @Id
    ...
    @OneToMany(mappedBy = "supporter")
    List<SubSupporter> subSuporter= new ArrayList<SuBSupporter>();

二等:

@Entity
@Table(name = "supporter_2")
public class SubSupporter{

    @Id
    private Long id;
    ...
    @ManyToOne
    @JoinColumn(name = "supporter_1.id", nullable=false)
    Supporter supporter;

当我试图让所有支持者循环访问他们时,这没关系,但在尝试访问 subSupporter 列表后,我得到一个错误:

[EL Warning]: 2016-07-12 11:29:45.282--ServerSession(180353207)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: com.microsoft.sqlserver.jdbc.SQLServerException: The multi-part identifier "supporter_1.id" could not be bound.
Error Code: 4104
Call: SELECT ID, coulmn_name, supporter_1.id FROM supporter_2 WHERE (supporter_1.id = ?)
    bind => [1 parameter bound]
Query: ReadAllQuery(name="subSupporter" referenceClass=SubSupporter sql="SELECT ID, coulmn_name, supporter_1.id FROM supporter_2 WHERE (supporter_1.id = ?)")

我看到 Select 语句是错误的,我不知道为什么。

PS 我用的是eclipse链接

【问题讨论】:

  • 这是现有数据库还是从实体生成的数据库?
  • 它是现有的带有数据的数据库,没有从实体生成。
  • 如果是“现有数据库”,则发布架构定义,并说明您是否真的有一个名为“supporter_1.id”的列
  • joincolumn注解中的名称需要是“supporter_2”中外键字段的名称。

标签: java sql jpa orm


【解决方案1】:

名称supporter_1.id 列中不能有点。改成supporter_1_id

【讨论】:

  • 您是否重建并重新部署了您的应用程序
  • 现在我将它作为 Java SE 应用程序运行我的主要测试类
  • 你确定是一模一样的错误信息
  • 现在我得到:内部异常:com.microsoft.sqlserver.jdbc.SQLServerException: Invalid column name 'supporter_1_id'
  • @Iwnow 更改名称后,如果 jpa 没有自动完成,则必须更改表
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多