簡體   English   中英

插入后休眠5更新

[英]Hibernate 5 update after insert

我正在將Hibernate版本從3升級到5。現在,我進行了一些測試,但都出錯了:

Caused by: java.sql.BatchUpdateException: The UPDATE statement conflicted with the FOREIGN KEY constraint "application_dme_provider_fk1". The conflict occurred in database "ruslans_00_develop_dev_easycare", table "dbo.application", column 'application_code'.

它在實體組織正在保存時發生。 調試日志顯示如下:

2019-01-22 07:17:14,962 DEBUG [main] SQL - insert into organization (country_code, organization_name, party_id) values (?, ?, ?)
2019-01-22 07:17:14,984 DEBUG [main] SQL - select partyrole0_.party_id as party_id2_109_0_, partyrole0_.party_role_type_code as party_ro1_109_0_ from party_role partyrole0_ where partyrole0_.party_id=? and partyrole0_.party_role_type_code=?
2019-01-22 07:17:14,988 DEBUG [main] SQL - insert into party_role (party_id, party_role_type_code) values (?, ?)
2019-01-22 07:17:15,011 DEBUG [main] SQL - select dmeprovide0_.party_id as party_id1_39_0_, dmeprovide0_.party_role_type_code as party_ro2_39_0_, dmeprovide0_.national_provider_identifier as national3_39_0_ from dme_provider dmeprovide0_ where dmeprovide0_.party_id=? and dmeprovide0_.party_role_type_code=?
2019-01-22 07:17:15,018 DEBUG [main] SQL - insert into dme_provider (national_provider_identifier, party_id, party_role_type_code) values (?, ?, ?)
2019-01-22 07:17:15,953 DEBUG [main] SQL - select organisati0_.id as id1_102_4_, organisati0_.account_number as account_2_102_4_, organisati0_.country_code as country13_102_4_, organisati0_.default_billing_plan_id as default14_102_4_, organisati0_.default_plan_updated_by as default15_102_4_, organisati0_.image_id as image_i16_102_4_, organisati0_.name as name3_102_4_, organisati0_.password_reset_duration_months as password4_102_4_, organisati0_.password_reset_required as password5_102_4_, organisati0_.patient_group_layout_code as patient17_102_4_, organisati0_.physician_access as physicia6_102_4_, organisati0_.default_plan_updated_on as default_7_102_4_, organisati0_.primary_contact_information_id as primary18_102_4_, organisati0_.first_name as first_na8_102_4_, organisati0_.last_name as last_nam9_102_4_, organisati0_.title as title10_102_4_, organisati0_.subscription_level as subscri11_102_4_, organisati0_.type as type12_102_4_, applicatio1_.organisation_id as organisa6_12_6_, applicatio1_.application_code as applicat1_12_6_, applicatio1_.party_id as party_id5_12_6_, applicatio1_.party_role_type_code as party_ro2_12_6_, applicatio1_.application_code as applicat1_6_, applicatio1_.application_code as applicat1_12_0_, applicatio1_.party_id as party_id5_12_0_, applicatio1_.party_role_type_code as party_ro2_12_0_, applicatio1_.is_activating_flag as is_activ3_12_0_, applicatio1_.migrated_to_budapest_flag as migrated4_12_0_, applicatio1_.organisation_id as organisa6_12_0_, image2_.id as id1_79_1_, image2_.description as descript2_79_1_, image2_.image as image3_79_1_, image2_.name as name4_79_1_, image2_.type as type5_79_1_, contactinf3_.id as id1_27_2_, contactinf3_.address_id as address13_27_2_, contactinf3_.email as email2_27_2_, contactinf3_.phone_number_0 as phone_nu3_27_2_, contactinf3_.phone_type_0 as phone_ty4_27_2_, contactinf3_.phone_number_1 as phone_nu5_27_2_, contactinf3_.phone_type_1 as phone_ty6_27_2_, contactinf3_.phone_number_2 as phone_nu7_27_2_, contactinf3_.phone_type_2 as phone_ty8_27_2_, contactinf3_.phone_number_3 as phone_nu9_27_2_, contactinf3_.phone_type_3 as phone_t10_27_2_, contactinf3_.phone_number_4 as phone_n11_27_2_, contactinf3_.phone_type_4 as phone_t12_27_2_, contactinf3_.time_zone_code as time_zo14_27_2_, address4_.id as id1_1_3_, address4_.address_line1 as address_2_1_3_, address4_.address_line2 as address_3_1_3_, address4_.city_suburb as city_sub4_1_3_, address4_.country_code as country_6_1_3_, address4_.postcode as postcode5_1_3_, address4_.state_id as state_id7_1_3_ from organisation organisati0_ left outer join application_dme_provider applicatio1_ on organisati0_.id=applicatio1_.organisation_id left outer join image image2_ on organisati0_.image_id=image2_.id left outer join contact_information contactinf3_ on organisati0_.primary_contact_information_id=contactinf3_.id left outer join address address4_ on contactinf3_.address_id=address4_.id where organisati0_.id=?
2019-01-22 07:17:15,969 DEBUG [main] SQL - select applicatio0_.application_code as applicat1_12_0_, applicatio0_.party_id as party_id5_12_0_, applicatio0_.party_role_type_code as party_ro2_12_0_, applicatio0_.is_activating_flag as is_activ3_12_0_, applicatio0_.migrated_to_budapest_flag as migrated4_12_0_, applicatio0_.organisation_id as organisa6_12_0_ from application_dme_provider applicatio0_ where applicatio0_.application_code=? and applicatio0_.party_id=? and applicatio0_.party_role_type_code=?
2019-01-22 07:17:15,973 DEBUG [main] SQL - select location0_.id as id1_90_2_, location0_.active as active2_90_2_, location0_.contact_information as contact_4_90_2_, location0_.name as name3_90_2_, location0_.organisation_id as organisa5_90_2_, contactinf1_.id as id1_27_0_, contactinf1_.address_id as address13_27_0_, contactinf1_.email as email2_27_0_, contactinf1_.phone_number_0 as phone_nu3_27_0_, contactinf1_.phone_type_0 as phone_ty4_27_0_, contactinf1_.phone_number_1 as phone_nu5_27_0_, contactinf1_.phone_type_1 as phone_ty6_27_0_, contactinf1_.phone_number_2 as phone_nu7_27_0_, contactinf1_.phone_type_2 as phone_ty8_27_0_, contactinf1_.phone_number_3 as phone_nu9_27_0_, contactinf1_.phone_type_3 as phone_t10_27_0_, contactinf1_.phone_number_4 as phone_n11_27_0_, contactinf1_.phone_type_4 as phone_t12_27_0_, contactinf1_.time_zone_code as time_zo14_27_0_, address2_.id as id1_1_1_, address2_.address_line1 as address_2_1_1_, address2_.address_line2 as address_3_1_1_, address2_.city_suburb as city_sub4_1_1_, address2_.country_code as country_6_1_1_, address2_.postcode as postcode5_1_1_, address2_.state_id as state_id7_1_1_ from location location0_ left outer join contact_information contactinf1_ on location0_.contact_information=contactinf1_.id left outer join address address2_ on contactinf1_.address_id=address2_.id where location0_.id=?
2019-01-22 07:17:15,983 DEBUG [main] SQL - select billingpla0_.organisation_id as organisa1_15_0_, billingpla0_.billing_plan_id as billing_2_15_0_, billingpla1_.id as id1_14_1_, billingpla1_.allowed_for_all_orgs_flag as allowed_2_14_1_, billingpla1_.card_only_flag as card_onl3_14_1_, billingpla1_.data_start_at_setup_flag as data_sta4_14_1_, billingpla1_.data_start_offset_days as data_sta5_14_1_, billingpla1_.night_profile_duration_days as night_pr6_14_1_, billingpla1_.plan_availability_end_date as plan_ava7_14_1_, billingpla1_.plan_availability_start_date as plan_ava8_14_1_, billingpla1_.plan_code as plan_cod9_14_1_, billingpla1_.plan_duration_days as plan_du10_14_1_, billingpla1_.plan_name as plan_na11_14_1_, billingpla1_.summary_data_duration_days as summary12_14_1_, billingpla1_.troubleshooting_duration_days as trouble13_14_1_, billingpla1_.version as version14_14_1_ from billing_plan_organisation billingpla0_ inner join billing_plan billingpla1_ on billingpla0_.billing_plan_id=billingpla1_.id where billingpla0_.organisation_id=?
2019-01-22 07:17:16,005 DEBUG [main] SQL - select locations0_.organisation_id as organisa5_90_0_, locations0_.id as id1_90_0_, locations0_.id as id1_90_1_, locations0_.active as active2_90_1_, locations0_.contact_information as contact_4_90_1_, locations0_.name as name3_90_1_, locations0_.organisation_id as organisa5_90_1_, contactinf1_.id as id1_27_2_, contactinf1_.address_id as address13_27_2_, contactinf1_.email as email2_27_2_, contactinf1_.phone_number_0 as phone_nu3_27_2_, contactinf1_.phone_type_0 as phone_ty4_27_2_, contactinf1_.phone_number_1 as phone_nu5_27_2_, contactinf1_.phone_type_1 as phone_ty6_27_2_, contactinf1_.phone_number_2 as phone_nu7_27_2_, contactinf1_.phone_type_2 as phone_ty8_27_2_, contactinf1_.phone_number_3 as phone_nu9_27_2_, contactinf1_.phone_type_3 as phone_t10_27_2_, contactinf1_.phone_number_4 as phone_n11_27_2_, contactinf1_.phone_type_4 as phone_t12_27_2_, contactinf1_.time_zone_code as time_zo14_27_2_, address2_.id as id1_1_3_, address2_.address_line1 as address_2_1_3_, address2_.address_line2 as address_3_1_3_, address2_.city_suburb as city_sub4_1_3_, address2_.country_code as country_6_1_3_, address2_.postcode as postcode5_1_3_, address2_.state_id as state_id7_1_3_, timezone3_.time_zone_code as time_zon1_144_4_, timezone3_.time_zone_name as time_zon2_144_4_ from location locations0_ left outer join contact_information contactinf1_ on locations0_.contact_information=contactinf1_.id left outer join address address2_ on contactinf1_.address_id=address2_.id left outer join time_zone timezone3_ on contactinf1_.time_zone_code=timezone3_.time_zone_code where locations0_.organisation_id=? order by locations0_.name
2019-01-22 07:17:16,015 DEBUG [main] SQL - insert into application_dme_provider (is_activating_flag, migrated_to_budapest_flag, organisation_id, application_code, party_id, party_role_type_code) values (?, ?, ?, ?, ?, ?)
2019-01-22 07:17:16,021 DEBUG [main] SQL - update application_dme_provider set application_code=? where application_code=? and party_id=? and party_role_type_code=?
2019-01-22 07:17:16,030 ERROR [main] BatchingBatch - HHH000315: Exception executing batch [java.sql.BatchUpdateException: The UPDATE statement conflicted with the FOREIGN KEY constraint "application_dme_provider_fk1". The conflict occurred in database "ruslans_00_develop_dev_easycare", table "dbo.application", column 'application_code'.], SQL: update application_dme_provider set application_code=? where application_code=? and party_id=? and party_role_type_code=?
2019-01-22 07:17:16,031 ERROR [main] SqlExceptionHelper - The UPDATE statement conflicted with the FOREIGN KEY constraint "application_dme_provider_fk1". The conflict occurred in database "ruslans_00_develop_dev_easycare", table "dbo.application", column 'application_code'.

組織類

@Entity(name = "Organisation")
@Table(name = "organisation", uniqueConstraints = {@UniqueConstraint(name = "organisation_name_udx", columnNames = {"name"})})
@NoArgsConstructor
@EntityListeners(EntityCreateListener.class)
public class Organisation implements Serializable, PatientListEntity {
    public static final SubscriptionLevel DEFAULT_SUBSCRIPTION_LEVEL = SubscriptionLevel.BASIC;

    public static final int NUMBER_OF_DAYS_IN_MONTH = 30;

    public static final int MAX_NAME_LENGTH = 50;

    public static final int MAX_ACCOUNT_NUMBER_LENGTH = 50;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Getter
    @Setter
    private Long id;

    // Some fields

    @Getter
    @OneToMany(mappedBy = "organisation", orphanRemoval = true, cascade = CascadeType.ALL)
    @MapKeyColumn(name = "application_code")
    @JsonManagedReference
    private Map<ApplicationEnum, ApplicationDmeProvider> applicationDmeProviderMap = new HashMap<>();

    // Some fields
}

ApplicationDmeProvider類

@Entity
@Table(name = "application_dme_provider")
@Getter
@Data
@Builder
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
@EqualsAndHashCode
public class ApplicationDmeProvider implements Serializable {

    @EmbeddedId
    private ApplicationDmeProviderId applicationDmeProviderId;

    @ManyToOne
    @JoinColumn(name = "organisation_id")
    @JsonBackReference
    private Organisation organisation;

    @Type(type = "yes_no")
    @Column(name = "migrated_to_budapest_flag")
    private boolean migrated;

    @Type(type = "yes_no")
    @Column(name = "is_activating_flag")
    @JsonIgnore
    private boolean activating;
}

ApplicationDmeProviderId類

@Data
@NoArgsConstructor
@Embeddable
@AllArgsConstructor
public class ApplicationDmeProviderId implements Serializable {
    @Column(name = "application_code")
    @Enumerated(EnumType.STRING)
    private ApplicationEnum applicationCode;

    @JsonBackReference
    @Embedded
    private PartyRoleId partyRoleId;
}

我們在Hibernate遷移之前檢查了此測試,根本沒有更新。 看來Hibernate 5更改了此類實體的保存行為。

發生此問題的原因是此映射帶有ApplicationEnum枚舉的applicationDmeProviderMap

注釋@MapKeyEnumerated(STRING)解決了該問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM