JPA @OneToOne导致SQLSyntaxErrorException

时间:2019-06-03 04:36:47

标签: hibernate jpa spring-data-jpa

第一个实体:

@Entity
@Table(name = "SCOL_INSCRIPTION_ETUDIANT")
public class ScolInscriptionEtudiant implements Serializable {

    @EmbeddedId
    ScolInscriptionEtudiantId id;

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(referencedColumnName = "FSPN_KEY")
    private ScolFormationSpecialisation scolFormationSpecialisation;

    @Column(name = "FSPN_KEY")
    private Long fspnkey;

第二个实体:

@Entity
@Table(name = "SCOLARITE.SCOL_FORMATION_SPECIALISATION")
public class ScolFormationSpecialisation {

 @Id
 @Column(name = "FSPN_KEY")
 private Long fspnkey;

 @OneToOne(mappedBy = "scolFormationSpecialisation")
 private ScolInscriptionEtudiant scolInscriptionEtudiant;

那两个表共享同一列“ fspnkey”,我想用它们来联接数据。

存储库:

public interface StudentDetailRepository extends CrudRepository<ScolInscriptionEtudiant, Long> {
    List<ScolInscriptionEtudiant> findAllByEtudnumero(String etudnumero);

调用存储库会产生此错误:

Caused by: oracle.jdbc.OracleDatabaseException: ORA-00904: "SCOLINSCRI0_"."SCOL_FORMATION_SPECIALISATION_FSPN_KEY" : invalid identifier

我遵循此指南:https://www.baeldung.com/jpa-one-to-one

您看到这段代码有什么问题吗?

2 个答案:

答案 0 :(得分:0)

在@JoinColumn值中,您还需要提供“ name”属性,这实际上指向ScolFormationSpecialisation中的唯一列。 请参阅链接中的示例。它在用户表中的名称=“ address_id”指向地址表中的“ id”。

答案 1 :(得分:0)

您在第一个实体中不需要fspnkey。并将您@JoinColumn更改为

@JoinColumn(name = "scolFormationSpecialisation_id", referencedColumnName = "FSPN_KEY")