Hibernate-JPA Родительский дочерний запрос вставки, пропускающий дублирующиеся столбцы дочерней таблицы, используя @Inheritance(стратегии = InheritanceType.JOINED)
У меня проблема с сохранением таблицы родительских отношений между двумя родителями.
У меня есть два стола, партия и человек. Идентификатором стороны являются PK и FK таблицы Person. Проблема заключается в том, что для обеих целей у меня в таблицах одинаковые CreatedBy, CreatedDate, LastRevisedBy и LastRevisedDate.
И когда я пытаюсь упорствовать, я получаю следующее:
model.Person {lastRevisedBy = John, dateOfBirth = 2017-10-30T17: 34: 28.199-04: 00, createDate=2017-10-30T17:34:28.199-04:00, isDeleted=false, creatBy=John, lastRevisedDate=2017-10-30T17:34:28.199-04:00, id=bf5a66de-d85b-4697-9659-2b8b516a1893}
вставить в СТОРОНУ (CREATEDBY, CREATEDDATE, ISDELETEDFLAG, LASTREVISEDBY, LASTREVISEDDATE, PARTYTYPEID, ID) значения (?,?,?,?,?,?,?)
вставить в DBO.PERSON (DATEOFBIRTH, DATEOFDEATH, GENDERTYPEID, MARITALSTATUSID, NPINUMBER, SSNENCRYPTEDDATAID, PERSONPARTYID) значения (?,?,?,?,?,?,?)
com.microsoft.sqlserver.jdbc.SQLServerException: Невозможно вставить значение NULL в столбец "LastRevisedDate", таблица "dbo.Person"; столбец не допускает нулевые значения. Вставить не удается.
Я расширяю класс Party из класса Person с помощью InheritanceType.JOINED. Если я удаляю сохраненные работы CreatedBy, CreatedDate, LastRevisedBy и LastRevisedDate таблицы Person, но если у меня есть эти столбцы, связанные с аудитом, запрос вставки пропускает эти столбцы в дочерней таблице.
Есть ли способ сделать соединение подкласса с заполнением обеих сторон таблиц?
Я знаю, что могу сделать это, используя старый способ отображения hibernate, но не этот способ аннотации. Пожалуйста помоги.
Зимуют-JPA-2,1-апи-1.0.0.final.jar
Party
[dbo].[Party](
[ID] [uniqueidentifier] NOT NULL,
[IndexID] [int] IDENTITY(1,1) NOT NULL,
[PartyTypeID] [int] NOT NULL,
[CreatedBy] [varchar](255) NOT NULL,
[CreatedDate] [datetimeoffset](7) NOT NULL,
[LastRevisedBy] [varchar](255) NOT NULL,
[LastRevisedDate] [datetimeoffset](7) NOT NULL,
)
Person
[dbo].[Person](
[PersonPartyID] [uniqueidentifier] NOT NULL,
[IndexID] [int] IDENTITY(1,1) NOT NULL,
[DateOfBirth] [datetimeoffset](7) NULL,
[IsDeletedFlag] [bit] NOT NULL,
[CreatedBy] [varchar](255) NOT NULL,
[CreatedDate] [datetimeoffset](7) NOT NULL,
[LastRevisedBy] [varchar](255) NOT NULL,
[LastRevisedDate] [datetimeoffset](7) NOT NULL,
)
ALTER TABLE [dbo].[Person] WITH CHECK ADD CONSTRAINT [FK_Person_Party] FOREIGN KEY([PersonPartyID])
REFERENCES [dbo].[Party] ([ID])
GO
@Entity
@Table(name = "PARTY")
@Inheritance(strategy = InheritanceType.JOINED)
public class Party {
private static final long serialVersionUID = -1092958275062608476L;
@Id
@Setter
@Getter
@Column(name = "ID", unique = true)
@GeneratedValue(generator = "uuid2")
@GenericGenerator(name = "uuid2", strategy = "uuid2")
private String id;
@Setter
@Getter
@Column(name = "PARTYTYPEID", nullable = false)
private Integer partyTypeId;
@Setter
@Getter
@Column(name = "ISDELETEDFLAG", nullable = false)
private boolean isDeleted;
@Column(name = "CREATEDBY", nullable = false)
@CreatedBy
@Getter
@Setter
private String createdBy;
@Convert(converter = DateTimeOffsetConverter.class)
@Column(name = "CREATEDDATE", nullable = false)
@CreatedDate
@Getter
@Setter
private OffsetDateTime createdDate;
@Column(name = "LASTREVISEDBY", nullable = false)
@LastModifiedBy
@Getter
@Setter
private String lastRevisedBy;
@Convert(converter = DateTimeOffsetConverter.class)
@Column(name = "LASTREVISEDDATE", nullable = false)
@LastModifiedDate
@Getter
@Setter
private OffsetDateTime lastRevisedDate;
}
@Entity
@Table(schema = "DBO", name = "PERSON")
@PrimaryKeyJoinColumn(name = "PERSONPARTYID")
public class Person extends Party {
private static final long serialVersionUID = 8568510078737428722L;
public Person() {
super();
}
@Setter
@Getter
@OneToOne(mappedBy = "person", cascade = CascadeType.ALL, fetch = FetchType.LAZY, optional = false)
private PersonName personName;
@Setter
@Getter
@Convert(converter = DateTimeOffsetConverter.class)
@Column(name = "DATEOFBIRTH")
private OffsetDateTime dateOfBirth;
}