当我尝试使用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
答案 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 }
上述实体类仅包含临时(非持久)实体字段,没有实际内容要存储在数据库中。