Я с трудом пытаюсь установить связь между двумя объектами в спящем режиме.Ниже приведена спецификация базы данных и созданных объектов
Создание таблицы базы данных:
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?