Ссылочное свойство Hibernate не является OneToOne - PullRequest
0 голосов
/ 20 марта 2019

Я с трудом пытаюсь установить связь между двумя объектами в спящем режиме.Ниже приведена спецификация базы данных и созданных объектов

Создание таблицы базы данных:

CREATE TABLE tbl_findings
(
    intCode int NOT NULL,
    intCurrentRiskRating int NOT NULL,
    strStatus nvarchar(30) NOT NULL,
    Reviewer1 nvarchar(255),
    Reviewer2 nvarchar(255),
    intSource int NOT NULL
    CONSTRAINT pk_finding PRIMARY KEY (intCode),
    CONSTRAINT fk_finding_currentriskratings FOREIGN KEY (intCurrentRiskRating) REFERENCES tbl_riskrating(intCode),
    CONSTRAINT fk_finding_sources FOREIGN KEY (intSource) REFERENCES tbl_sources(intCode)
)
CREATE TABLE tbl_exceptions
(
    intCode int NOT NULL,
    objGrantedExpirationDate datetime,
    strStatus nvarchar(30) NOT NULL,
    objDueDate datetime,
    objDelayedDueDate datetime,
    objDataDate datetime NOT NULL
    CONSTRAINT pk_exceptions PRIMARY KEY (intCode)
)
CREATE TABLE tbl_relationships
(
    intFinding int NOT NULL,
    intException int NOT NULL
    CONSTRAINT pk_relationships PRIMARY KEY (intFinding, intException),
    CONSTRAINT fk_relationships_findings FOREIGN KEY (intFinding) REFERENCES tbl_findings(intCode),
    CONSTRAINT fk_relationships_exceptions FOREIGN KEY (intException) REFERENCES tbl_exceptions(intCode)
)

Поскольку исключение может иметь несколько результатов, связанных с ним, я создаю для него таблицу отношений

Сущности определены, как показано ниже:

@Entity
@Table(name = "tbl_findings")
public class FindingEntity
{
    @Id
    @Column(name = "intCode")
    private Integer intCode;
    ...
}

Для отношений мне пришлось создать Embeddable, поскольку первичный ключ состоит из двух элементов intFinding и intException

показано в следующем объекте:

@Entity
@Table(name = "tbl_relationships")
public class RelationshipEntity
{
    @EmbeddedId
    private RelationshipKey objKey;
    ...
}

, а ключ для встраивания:

@Embeddable
public class RelationshipKey implements Serializable
{
    /**
     * 
     */
    private static final long serialVersionUID = -7604951870174767234L;
    @OneToOne(cascade = CascadeType.ALL, mappedBy = "intCode")
    private FindingEntity objFinding;
    @OneToOne(cascade = CascadeType.ALL, mappedBy = "intCode")
    private ExceptionEntity objException;
    ...
}

, но я получаю следующую ошибку:

Первоначальное создание SessionFactory не удалось.org.hibernate.AnnotationException: Ссылочное свойство не является (One | Many) ToOne: ... FindingEntity.intCode в mappedBy of ... комбинированныйKeys.RelationshipKey.objFinding

Насколько я понял наВ mappedBy я должен указать свойство целевого объекта, которое в данном случае является «intCode».Я исследую некоторые примеры в Интернете, но они всегда связаны с «пользовательскими объектами».Есть ли какие-либо ограничения, которые не позволяют использовать Integer на mappedBy?

...