Я работаю над существующим проектом весенней загрузки.Сущность приложения сотрудника сопоставлена с 78 другими объектами.У каждой сущности есть составной ключ.Когда я запускаю проект, я получаю сообщение об ошибке здесь: -
@ManyToOne
@JoinColumns({
@JoinColumn(name="COMPANYID", referencedColumnName="COMPANYID", insertable=false, updatable=false),
@JoinColumn(name="COMPANYFIRM", referencedColumnName="COMPANYFIRM") })
private Firm firm;
Firm.java
public class Firm
implements Serializable
{
@EmbeddedId
private FirmID firmID;
private String description;
}
FirmID.java
package com.nicholas.jpa;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Embeddable;
@Embeddable
public class FirmID
implements Serializable
{
@Column(name="COMPANYID")
private int id;
@Column(name="COMPANYFIRM")
private String name;
public FirmID()
{
}
public FirmID(int id, String name)
{
this.id = id;
this.name = name;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public int getId()
{
return id;
}
public void setId(int id)
{
this.id = id;
}
public int hashCode()
{
return name.hashCode();
}
@Override
public String toString()
{
return String.format("%d-%s", id, name);
}
public boolean equals(Object obj)
{
if (obj == this)
return true;
if (obj == null)
return false;
if (!(obj instanceof FirmID))
return false;
FirmID pk = (FirmID) obj;
return pk.id == id && pk.name.equals(name);
}
}
Ошибка: -
Причина: org.hibernate.AnnotationException: Смешивание вставляемых и не вставляемых столбцов в свойстве не допускается: com.nicholas.jpa.Employee.firm в org.hibernate.cfg.Ejb3Column.checkPropertyConsistency (Ejb3Column.java:718) ~ [hibernate-core-5.2.16.Final.jar: 5.2.16.Final] в org.hibernate.cfg.AnnotationBinder.bindManyToOne (AnnotationBinder.java:3035) ~ [hibernate-core-5.2.16.Final.jar: 5.2.16.Final] at org.hibernate.cfg.AnnotationBinder.processElementAnnotations (AnnotationBinder.java:1776) ~ [hibernate-core-5.2.16.Final.jar: 5.2.16.Final]в org.hibernate.cfg.AnnotationBinder.processIdPropertiesIfNotAlready (AnnotationBinder.java:924) ~ [hibernate-core-5.2.16.Final.jar: 5.2.16.Final] в org.hibernate.cfg.AnnotationBinder.bindClass (аннотация.Java: 751) ~ [hibernate-core-5.2.16.Final.jar: 5.2.16.Final]
Я решилэто с помощью Должна ли Hibernate обрабатывать перекрывающиеся внешние ключи?
@ManyToOne(optional = true)
@JoinColumnsOrFormulas(value = {
@JoinColumnOrFormula(formula = @JoinFormula(referencedColumnName = "COMPANYID", value = "COMPANYID")),
@JoinColumnOrFormula(formula = @JoinFormula(referencedColumnName = "COMPANYFIRM", value = "COMPANYFIRM"))})
private Firm firm;
Теперь ошибка выше исчезла, поэтому я должен заменить все @JoinColumns на @JoinColumnsOrFormulas.В конце я столкнулся с ClassCastException
. Вызвано: java.lang.ClassCastException: org.hibernate.mapping.Formula не может быть приведен к org.hibernate.mapping.Column в org.hibernate.cfg..annotations.TableBinder.bindFk (TableBinder.java:584) ~ [hibernate-core-5.2.16.Final.jar: 5.2.16.Final] at org.hibernate.cfg.annotations.CollectionBinder.bindCollectionSecondPass (CollectionBinder.java:1627) ~ [hibernate-core-5.2.16.Final.jar: 5.2.16.Final] в org.hibernate.cfg.annotations.CollectionBinder.bindOneToManySecondPass (CollectionBinder.java:881) ~ [hibernate-core-5.2.16.Final.jar: 5.2.16.Final] в org.hibernate.cfg.annotations.CollectionBinder.bindStarToManySecondPass (CollectionBinder.java:796) ~ [hibernate-core-5.2.16.Final.jar: 5.2.16.Final]в org.hibernate.cfg.annotations.CollectionBinder $ 1.secondPass (CollectionBinder.java:735) ~ [hibernate-core-5.2.16.Final.jar: 5.2.16.Final] в org.hibernate.cfg.CollectionSecondPass.doSecondPass(CollectionSecondPass.java:54) ~ [hibernate-core-5.2.16.Final.jar: 5.2.16.Final]
Поскольку я уже упоминал, что существует множество сущностей, и я проверил каждую сущность с каждой строкой, ошибки нет.Сущность под названием EntryExit.java является последней сущностью, которая заменит @JoinColumns, если я заменю их, тогда это ClassCastException выбрасывает другое мудрое старое исключение: «Смешение вставляемых и не вставляемых столбцов в свойстве недопустимо».
Я проверил следующие ответы, но, похоже, ничего не работает в моем случае: -
hibernate @JoinColumnsOrFormulas throws Формула не может быть приведена к исключению столбца
Hibernate и @JoinFormula: org.hibernate.mapping. Формула не может быть приведена к org.hibernate.mapping.Column
https://hibernate.atlassian.net/browse/HHH-10897
Пожалуйста, предложите мне, если есть другой подход для сопоставления @ManyToOne с составным ключом или решением в существующем подходе.Я жду вашей помощи ..!