【问题标题】:'Many To One' attribute type should not be 'Persistence Entity'“多对一”属性类型不应为“持久性实体”
【发布时间】:2015-11-14 10:03:15
【问题描述】:

我正在试用 IntelliJ IDEA,它警告我有一个我不太了解的 Hibernate 关联。

一面:

@Entity
@Table(name = "MY_REQ_ASSIGNEE")
public class MyRequestAssignee extends BaseUser {
    //...
    @OneToMany(fetch = FetchType.EAGER, cascade = {CascadeType.ALL}, mappedBy = "myRequestAssignee")
    private Collection<MyRequest> myRequests = new ArrayList<>();
    //...
}

多方:

@Entity
@Table(name = "MY_REQUEST")
public class MyRequest implements Persistable {

   //...
   @ManyToOne(fetch=FetchType.EAGER)
   @JoinColumn(name="ASSIGNEE_ID")
   private MyRequestAssignee myRequestAssignee;
   //...
}

Persistable 只是一个具有id 属性以确保 Hibernate 可以访问它的接口。)

我看到MyRequestAssignee 类型带有红色下划线,消息显示为'Many To One' attribute type should not be 'Persistence Entity'. 我的人际关系有问题吗?

为了进行完整性检查,我也查看了 this postthis post

【问题讨论】:

    标签: java hibernate intellij-idea


    【解决方案1】:

    我发现这是由于子实体未在 hibernate.cfg.xml 中定义造成的。错误信息可以改进。

    【讨论】:

    • &lt;mapping class="com.company.domain.MyRequestAssignee"/&gt; 添加到hibernate.cfg.xml 解决了这个问题。
    • 太棒了。我应该更明确地说明要添加到 hibernate.cfg.xml 的内容。
    • 如果您使用的是 JPA,则可能是缺少 persistence.xml 中的条目。
    • @TheChrisPratt 正确。或者它可能在您的 LocalSessionFactoryBean Spring bean 配置的 annotatedClasses 属性中。
    • 如果您使用注解而不是 XML,则需要在字段中添加 @ManyToOne 注解。看到这个答案:stackoverflow.com/questions/3927091/…
    【解决方案2】:

    这个问题有点老了,但我只是想补充一点,这也可能是由 hibernate .hbm 映射文件和 JPA 注释冲突引起的。我在将旧映射文件转换为注释时遇到此错误消息,忘记注释掉其中一个旧映射文件。

    【讨论】:

    • 此错误的另一个原因可能是您忘记将@Entity 属性添加到您的目标类。我在搜索这个时最终到了这里(即使那不是 OP 的问题)
    【解决方案3】:

    我在 IntelliJ 中使用 Quarkusmulti-module Gradle 项目中遇到了这个问题, 我有一个从模块 A 的实体到模块 B 的实体的 OneToOne 引用。

    代码有效,所以我猜它可能是 IntelliJ 的错误标志

    【讨论】:

      猜你喜欢
      • 2013-05-06
      • 2020-03-28
      • 2014-04-21
      • 1970-01-01
      • 2021-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-18
      相关资源
      最近更新 更多