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;


}

0 ответов

Другие вопросы по тегам