From 1b10e695b7f8a789a7b899eaa2af492b6741e33b Mon Sep 17 00:00:00 2001 From: Jens Pelzetter Date: Sat, 28 Jan 2023 17:27:39 +0100 Subject: [PATCH] PersonNames is no longer an embeddedable entity. --- ccm-cms/package-lock.json | 4 +-- ccm-cms/package.json | 2 +- .../org/librecms/assets/ContactEntry.java | 3 -- .../main/java/org/librecms/assets/Person.java | 23 ++++++++----- .../java/org/librecms/assets/PersonName.java | 34 +++++++++++++++++-- ..._0_0_36__convert_person_name_to_entity.sql | 31 +++++++++++++++++ ..._0_0_36__convert_person_name_to_entity.sql | 31 +++++++++++++++++ .../libreccm/configuration/EnumSetting.java | 14 ++++++-- .../imexport/AbstractEntityImExporter.java | 2 -- 9 files changed, 123 insertions(+), 21 deletions(-) create mode 100644 ccm-cms/src/main/resources/db/migrations/org/librecms/ccm_cms/h2/V7_0_0_36__convert_person_name_to_entity.sql create mode 100644 ccm-cms/src/main/resources/db/migrations/org/librecms/ccm_cms/pgsql/V7_0_0_36__convert_person_name_to_entity.sql diff --git a/ccm-cms/package-lock.json b/ccm-cms/package-lock.json index 48c41c8f5..e0c14a0db 100644 --- a/ccm-cms/package-lock.json +++ b/ccm-cms/package-lock.json @@ -1,12 +1,12 @@ { "name": "@librecms/ccm-cms", - "version": "7.0.0-SNAPSHOT.2023-01-28T095804", + "version": "7.0.0-SNAPSHOT.2023-01-28T144335", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@librecms/ccm-cms", - "version": "7.0.0-SNAPSHOT.2023-01-28T095804", + "version": "7.0.0-SNAPSHOT.2023-01-28T144335", "license": "LGPL-3.0-or-later", "dependencies": { "@tiptap/core": "^2.0.0-beta.127", diff --git a/ccm-cms/package.json b/ccm-cms/package.json index 95bf38afa..969984bbc 100644 --- a/ccm-cms/package.json +++ b/ccm-cms/package.json @@ -1,6 +1,6 @@ { "name": "@librecms/ccm-cms", - "version": "7.0.0-SNAPSHOT.2023-01-28T095804", + "version": "7.0.0-SNAPSHOT.2023-01-28T144335", "description": "JavaScript stuff for ccm-cms", "main": "target/generated-resources/assets/@content-sections/cms-admin.js", "types": "target/generated-resources/assets/@content-sections/cms-admin.d.ts", diff --git a/ccm-cms/src/main/java/org/librecms/assets/ContactEntry.java b/ccm-cms/src/main/java/org/librecms/assets/ContactEntry.java index 6744530d5..091b7ce94 100644 --- a/ccm-cms/src/main/java/org/librecms/assets/ContactEntry.java +++ b/ccm-cms/src/main/java/org/librecms/assets/ContactEntry.java @@ -106,12 +106,10 @@ public class ContactEntry implements Serializable { // this.key = key; // } public ContactEntryKey getKey() { - return key; } public void setKey(final ContactEntryKey key) { - this.key = key; } @@ -135,7 +133,6 @@ public class ContactEntry implements Serializable { @Override public boolean equals(final Object obj) { - if (this == obj) { return true; } diff --git a/ccm-cms/src/main/java/org/librecms/assets/Person.java b/ccm-cms/src/main/java/org/librecms/assets/Person.java index 1344e8987..bdba4773f 100644 --- a/ccm-cms/src/main/java/org/librecms/assets/Person.java +++ b/ccm-cms/src/main/java/org/librecms/assets/Person.java @@ -20,6 +20,8 @@ package org.librecms.assets; import com.fasterxml.jackson.annotation.JsonIdentityInfo; import com.fasterxml.jackson.annotation.ObjectIdGenerators; +import org.hibernate.annotations.Cascade; +import org.hibernate.annotations.CascadeType; import org.hibernate.envers.Audited; import org.librecms.ui.contentsections.assets.MvcAssetEditKit; import org.librecms.ui.contentsections.assets.PersonCreateStep; @@ -34,10 +36,12 @@ import java.util.Objects; import javax.persistence.Column; import javax.persistence.ElementCollection; import javax.persistence.Entity; +import javax.persistence.FetchType; import javax.persistence.JoinColumn; import javax.persistence.JoinTable; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; +import javax.persistence.OneToMany; import javax.persistence.Table; import static org.librecms.CmsConstants.*; @@ -77,14 +81,17 @@ public class Person extends ContactableEntity { private static final long serialVersionUID = 1L; - @ElementCollection - @JoinTable( - joinColumns = { - @JoinColumn(name = "PERSON_ID") - }, - name = "PERSON_NAMES", - schema = DB_SCHEMA - ) +// @ElementCollection(fetch = FetchType.EAGER) +// @JoinTable( +// joinColumns = { +// @JoinColumn(name = "PERSON_ID") +// }, +// name = "PERSON_NAMES", +// schema = DB_SCHEMA +// ) + @OneToMany + @JoinColumn(name = "PERSON_ID") + @Cascade(CascadeType.ALL) private List personNames; /** diff --git a/ccm-cms/src/main/java/org/librecms/assets/PersonName.java b/ccm-cms/src/main/java/org/librecms/assets/PersonName.java index 2246aea9d..29a5489ad 100644 --- a/ccm-cms/src/main/java/org/librecms/assets/PersonName.java +++ b/ccm-cms/src/main/java/org/librecms/assets/PersonName.java @@ -18,21 +18,36 @@ */ package org.librecms.assets; +import org.hibernate.envers.Audited; + import java.io.Serializable; import java.util.Objects; import javax.persistence.Column; -import javax.persistence.Embeddable; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Table; + +import static org.librecms.CmsConstants.DB_SCHEMA; /** * * @author Jens Pelzetter */ -@Embeddable +@Entity +@Audited +@Table(name = "PERSON_NAMES", schema = DB_SCHEMA) public class PersonName implements Serializable { private static final long serialVersionUID = 1L; + @Column(name ="PERSON_NAME_ID") + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private long personNameId; + /** * The surname/familyname of the person */ @@ -59,6 +74,14 @@ public class PersonName implements Serializable { @Column(name = "SUFFIX") private String suffix; + public long getPersonNameId() { + return personNameId; + } + + protected void setPersonNameId(final long personNameId) { + this.personNameId = personNameId; + } + public String getSurname() { return surname; } @@ -94,6 +117,7 @@ public class PersonName implements Serializable { @Override public int hashCode() { int hash = 5; + hash = 79 * hash + (int) (personNameId ^ (personNameId >>> 32)); hash = 79 * hash + Objects.hashCode(surname); hash = 79 * hash + Objects.hashCode(givenName); hash = 79 * hash + Objects.hashCode(prefix); @@ -103,7 +127,6 @@ public class PersonName implements Serializable { @Override public boolean equals(final Object obj) { - if (this == obj) { return true; } @@ -117,6 +140,9 @@ public class PersonName implements Serializable { if (!other.canEqual(this)) { return false; } + if (personNameId != other.getPersonNameId()) { + return false; + } if (!Objects.equals(surname, other.getSurname())) { return false; } @@ -143,12 +169,14 @@ public class PersonName implements Serializable { return String.format( "%s{ " + + "personNameId = %d, " + "surname = \"%s\", " + "givenName = \"%s\", " + "prefix = \"%s\", " + "suffix = \"%s\"%s" + " }", super.toString(), + personNameId, surname, givenName, prefix, diff --git a/ccm-cms/src/main/resources/db/migrations/org/librecms/ccm_cms/h2/V7_0_0_36__convert_person_name_to_entity.sql b/ccm-cms/src/main/resources/db/migrations/org/librecms/ccm_cms/h2/V7_0_0_36__convert_person_name_to_entity.sql new file mode 100644 index 000000000..02f9841f8 --- /dev/null +++ b/ccm-cms/src/main/resources/db/migrations/org/librecms/ccm_cms/h2/V7_0_0_36__convert_person_name_to_entity.sql @@ -0,0 +1,31 @@ +alter table ccm_cms.person_names add column person_name_id int8; +update ccm_cms.person_names set person_name_id = nextval('hibernate_sequence'); +alter table ccm_cms.person_names alter COLUMN person_name_id set not null; +alter table ccm_cms.person_names add primary key (person_name_id); + +alter table ccm_cms.person_names_aud add column person_name_id int8; +update ccm_cms.person_names_aud set person_name_id = (select person_name_id from ccm_cms.person_names where ccm_cms.person_names.person_id = ccm_cms.person_names_aud.person_id); +alter table ccm_cms.person_names_aud drop constraint person_names_aud_pkey; +alter table ccm_cms.person_names_aud add primary key (person_name_id, rev, revtype); + +create table CCM_CMS.Person_PersonName_AUD ( + REV int4 not null, + PERSON_ID int8 not null, + PERSON_NAME_ID int8 not null, + REVTYPE int2, + REVEND int4, + primary key (REV, REVTYPE, PERSON_ID, PERSON_NAME_ID) +); +insert into ccm_cms.person_personname_aud (rev, person_id, person_name_id, revtype, revend) (select rev, person_id, person_name_id, revtype, revend from ccm_cms.person_names_aud); + +alter table ccm_cms.person_names_aud drop column person_id; + +alter table CCM_CMS.Person_PersonName_AUD + add constraint FKljtnu2oi4hkqwrmw8n0jhegp7 + foreign key (REV) + references CCM_CORE.CCM_REVISIONS; + + alter table CCM_CMS.Person_PersonName_AUD + add constraint FKnc3guy1nhw5pa0b62hdmqwd6k + foreign key (REVEND) + references CCM_CORE.CCM_REVISIONS; \ No newline at end of file diff --git a/ccm-cms/src/main/resources/db/migrations/org/librecms/ccm_cms/pgsql/V7_0_0_36__convert_person_name_to_entity.sql b/ccm-cms/src/main/resources/db/migrations/org/librecms/ccm_cms/pgsql/V7_0_0_36__convert_person_name_to_entity.sql new file mode 100644 index 000000000..a049e3b77 --- /dev/null +++ b/ccm-cms/src/main/resources/db/migrations/org/librecms/ccm_cms/pgsql/V7_0_0_36__convert_person_name_to_entity.sql @@ -0,0 +1,31 @@ +alter table ccm_cms.person_names add column person_name_id int8; +update ccm_cms.person_names set person_name_id = nextval('hibernate_sequence'); +alter table ccm_cms.person_names alter COLUMN person_name_id set not null; +alter table ccm_cms.person_names add primary key (person_name_id); + +alter table ccm_cms.person_names_aud add column person_name_id int8; +update ccm_cms.person_names_aud set person_name_id = (select person_name_id from ccm_cms.person_names where ccm_cms.person_names.person_id = ccm_cms.person_names_aud.person_id); +alter table ccm_cms.person_names_aud drop constraint person_names_aud_pkey; +alter table ccm_cms.person_names_aud add primary key (person_name_id, rev, revtype); + +create table CCM_CMS.Person_PersonName_AUD ( + REV int4 not null, + PERSON_ID int8 not null, + PERSON_NAME_ID int8 not null, + REVTYPE int2, + REVEND int4, + primary key (REV, REVTYPE, PERSON_ID, PERSON_NAME_ID) +); +insert into ccm_cms.person_personname_aud (rev, person_id, person_name_id, revtype, revend) (select rev, person_id, person_name_id, revtype, revend from ccm_cms.person_names_aud); + +alter table ccm_cms.person_names_aud drop column person_id; + +alter table CCM_CMS.Person_PersonName_AUD + add constraint FKljtnu2oi4hkqwrmw8n0jhegp7 + foreign key (REV) + references CCM_CORE.CCM_REVISIONS; + +alter table CCM_CMS.Person_PersonName_AUD + add constraint FKnc3guy1nhw5pa0b62hdmqwd6k + foreign key (REVEND) + references CCM_CORE.CCM_REVISIONS; \ No newline at end of file diff --git a/ccm-core/src/main/java/org/libreccm/configuration/EnumSetting.java b/ccm-core/src/main/java/org/libreccm/configuration/EnumSetting.java index 1f4bacd7f..3380d43ae 100644 --- a/ccm-core/src/main/java/org/libreccm/configuration/EnumSetting.java +++ b/ccm-core/src/main/java/org/libreccm/configuration/EnumSetting.java @@ -18,12 +18,22 @@ */ package org.libreccm.configuration; -import javax.persistence.*; import java.io.Serializable; -import java.util.*; import static org.libreccm.core.CoreConstants.DB_SCHEMA; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Objects; +import java.util.Set; + +import javax.persistence.ElementCollection; +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.JoinColumn; +import javax.persistence.JoinTable; + /** * A setting class for storing a set of strings. This can be used to generate * enums which can be configured by the administrator. diff --git a/ccm-core/src/main/java/org/libreccm/imexport/AbstractEntityImExporter.java b/ccm-core/src/main/java/org/libreccm/imexport/AbstractEntityImExporter.java index 43e516875..1dd9b83b5 100644 --- a/ccm-core/src/main/java/org/libreccm/imexport/AbstractEntityImExporter.java +++ b/ccm-core/src/main/java/org/libreccm/imexport/AbstractEntityImExporter.java @@ -149,8 +149,6 @@ public abstract class AbstractEntityImExporter { * * @param data The entity data to import * - * @return The imported entity. - * * @throws ImportExpection If the import fails. * * @see #findExistingEntity(java.lang.String)