JPA:列与引用列的数据类型不同

时间:2019-05-21 15:46:46

标签: java sql-server hibernate jpa

在尝试运行我的应用程序时,我没有发现任何负载。事实证明,我遇到了一个Column 'Graad.GraadNumeriek' is not the same data type as referencing column 'Persoon.GraadNumeriek' in foreign key 'Persoon_GraadNumeriek'.错误,这是我以前从未遇到过的。

我不知道是什么原因导致的问题,因为我对Locatie遵循相同的原理,而且效果很好。

因为Persoon是用于GUI的接口,所以该类称为ClubPersoon而不是Persoon。数据库中的表称为Persoon。

@Entity
@Access(AccessType.PROPERTY)
@Table(name = "Persoon")
@NamedQueries({
    @NamedQuery(name = "ClubPersoon.getAllePersonen",
            query = "SELECT p FROM ClubPersoon p"),
})
public class ClubPersoon implements Serializable, Persoon {

    int id;
    private Locatie locatie;
    private SimpleStringProperty graadProperty = new SimpleStringProperty();

    public ClubPersoon() {
        activiteiten = new ArrayList<>();
    }

    public ClubPersoon(int id, PersoonDTO dto) {
        setId(id);
        setLocatie(new Locatie(dto.getPostcode(), dto.getAdres(), dto.getStad()));
        setGraad(new Graad(dto.getGraad()));
        activiteiten = new ArrayList<>();
    }

    public ClubPersoon(PersoonDTO dto) {
        setLocatie(new Locatie(dto.getPostcode(), dto.getAdres(), dto.getStad()));
        setGraad(new Graad(dto.getGraad()));
        activiteiten = new ArrayList<>();

    }

    @ManyToOne
    @JoinColumn(name = "GraadNumeriek")
    @Override
    public Graad getGraad() {
        return new Graad(graadProperty.get());
    }

    @ManyToOne(cascade = CascadeType.PERSIST)
    @JoinColumn(name = "LocatieId")
    @Override
    public Locatie getLocatie() {
        return locatie;
    }

    public void setLocatie(Locatie locatie) {
        this.locatie = locatie;
    }

    @Override
    public SimpleStringProperty graadProperty() {
        return this.graadProperty;
    }

    public void setGraad(Graad graad) {
        if (graad != null) {
            this.graadProperty.set(graad.graadNumeriek);
        } else {
            this.graadProperty.set("Geen graad");
        }
    }

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "PersoonId")
    @Override
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }
}

Graad

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

    @Id
    @Column(name = "GraadNumeriek")
    protected String graadNumeriek;
    @Column(name = "Niveau")
    protected String niveau;

    public Graad() {
    }

    public Graad(String graadNumeriek) {
        setGraadNumeriek(graadNumeriek);
        setNiveau(GraadUtil.getNiveau(graadNumeriek););
    }

    public String getGraadNumeriek() {
        return graadNumeriek;
    }

    public void setGraadNumeriek(String graadNumeriek) {
        ControleerGraadNumeriek(graadNumeriek);
        this.graadNumeriek = graadNumeriek;
    }

}

0 个答案:

没有答案