JPA表产生混乱

时间:2019-02-28 02:09:06

标签: spring-boot spring-data-jpa

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

  

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

这是我的实体定义;

ProjectSegment

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

GISProject

@ManyToOne
@JoinColumn
private transient ProjectSegment segmentOfProject;

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

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

1 个答案:

答案 0 :(得分:3)

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

  

临时字段

     

临时实体字段是不参与持久性的字段,其值从不存储在数据库中(类似于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