【问题标题】:JPA table generating confusionJPA 表产生混淆
【发布时间】:2019-02-28 02:09:06
【问题描述】:

当我尝试使用JPA生成mysql表时,遇到如下异常。

mappedBy 引用了一个未知的目标实体属性: com.cs.domain.GISProject.segmentOfProject 在 com.cs.domain.ProjectSegment.gisProcesses

这是我的实体定义;

项目段

@OneToMany(mappedBy = "segmentOfProject", cascade = CascadeType.ALL)
private Set<GISProject> gisProcesses;

地理信息系统项目

@ManyToOne
@JoinColumn
private transient ProjectSegment segmentOfProject;

从教程看来还可以,这就是为什么我对出了什么问题感到困惑。

环境为Spring Boot 2.1.3.RELEASE,带有spring-boot-starter-data-jpa和mysql驱动5.1.28

【问题讨论】:

  • @buræquete,问题是我的一对多,反之亦然注释没有按预期工作。太奇怪了,其他一对多的领域都有效
  • 能否请您添加您使用的教程的链接,并请添加工作关系的详细信息?
  • 绝对,hellokoding.com/… 是我遵循的教程
  • @buræquete,对不起,我没有得到您的帮助,感谢您的帮助,它现在可以工作了。但我很困惑为什么瞬态不能被字段使用。无论如何它现在工作。再次感谢

标签: spring-boot spring-data-jpa


【解决方案1】:

GISProject 实体中的 @ManyToOne 关系定义字段中的 transient 关键字导致了问题。从错误消息中可以看出,由于暂时性,该字段被完全忽略为持久性,并且从一侧破坏了关系定义。删除它应该就足够了。

瞬态场

瞬态实体字段是不参与持久化的字段,它们的值永远不会存储在数据库中(类似于 Java 中不参与序列化的瞬态字段)。静态和最终实体字段始终被认为是瞬态的。其他字段可以使用 Java 瞬态修饰符(也影响序列化)或 JPA @Transient 注释(仅影响持久性)显式声明为瞬态:

public class EntityWithTransientFields {
    static int transient1; // not persistent because of static
    final int transient2 = 0;  // not persistent because of final
    transient int transient3; // not persistent because of transient
    @Transient int transient4; // not persistent because of @Transient
}

上述实体类仅包含临时(非持久)实体字段,没有要存储在数据库中的真实内容。

source

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-03
    • 1970-01-01
    • 1970-01-01
    • 2020-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-24
    相关资源
    最近更新 更多