From 2f2cdf524bff88336342042d0506de58d460c264 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Pil=C3=A1r?= <xpilar3@fi.muni.cz> Date: Wed, 24 Feb 2021 11:48:16 +0100 Subject: [PATCH] Identity generation replaced by the sequence generation. --- .../adaptive/domain/AbstractEntity.java | 50 ------------------- .../training/adaptive/domain/AccessToken.java | 19 ++++--- .../adaptive/domain/TRAcquisitionLock.java | 23 +++++++-- .../training/adaptive/domain/UserRef.java | 13 +++-- .../adaptive/domain/phase/AbstractPhase.java | 1 + .../domain/phase/DecisionMatrixRow.java | 1 - .../domain/training/TrainingDefinition.java | 14 ++++-- .../domain/training/TrainingInstance.java | 15 ++++-- .../adaptive/domain/training/TrainingRun.java | 16 +++--- .../TrainingDefinitionRepositoryImpl.java | 3 +- .../V1__db_adaptive_trainings_schema.sql | 38 +++++++------- .../V2__db_adaptive_trainings_sequences.sql | 6 +++ 12 files changed, 96 insertions(+), 103 deletions(-) delete mode 100644 src/main/java/cz/muni/ics/kypo/training/adaptive/domain/AbstractEntity.java diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/AbstractEntity.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/AbstractEntity.java deleted file mode 100644 index 5892f365..00000000 --- a/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/AbstractEntity.java +++ /dev/null @@ -1,50 +0,0 @@ -package cz.muni.ics.kypo.training.adaptive.domain; - -import javax.persistence.*; -import java.io.Serializable; - -/** - * The type Abstract entity. - * - * @param <PK> Primary key for a given entity. - */ -@MappedSuperclass -public abstract class AbstractEntity<PK extends Serializable> implements Serializable { - - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "id", unique = true, nullable = false, insertable = false) - private PK id; - - /** - * Instantiates a new Abstract entity. - */ - public AbstractEntity() { - } - - /** - * Gets id. - * - * @return the id - */ - public PK getId() { - return id; - } - - /** - * Sets id. - * - * @param id the id - */ - public void setId(PK id) { - this.id = id; - } - - @Override - public String toString() { - return "AbstractEntity{" + - "id=" + id + - '}'; - } -} - diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/AccessToken.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/AccessToken.java index dc97d18f..5225f98f 100644 --- a/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/AccessToken.java +++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/AccessToken.java @@ -15,8 +15,13 @@ import java.util.Objects; query = "SELECT at FROM AccessToken at WHERE at.accessToken = :accessToken" ), }) -public class AccessToken extends AbstractEntity<Long> { +public class AccessToken { + @Id + @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "accessTokenGenerator") + @SequenceGenerator(name = "accessTokenGenerator", sequenceName = "access_token_seq") + @Column(name = "access_token_id", nullable = false, unique = true) + private Long id; @Column(name = "access_token", nullable = false, unique = true) private String accessToken; @@ -34,7 +39,7 @@ public class AccessToken extends AbstractEntity<Long> { */ public AccessToken(Long id, String accessToken) { this.accessToken = accessToken; - super.setId(id); + this.id = id; } /** @@ -43,7 +48,7 @@ public class AccessToken extends AbstractEntity<Long> { * @return the id */ public Long getId() { - return super.getId(); + return id; } /** @@ -52,7 +57,7 @@ public class AccessToken extends AbstractEntity<Long> { * @param id the id */ public void setId(Long id) { - super.setId(id); + this.id = id; } /** @@ -80,18 +85,18 @@ public class AccessToken extends AbstractEntity<Long> { if (!(o instanceof AccessToken)) return false; AccessToken accessToken = (AccessToken) o; - return Objects.equals(super.getId(), accessToken.getId()) && Objects.equals(this.accessToken, accessToken.getAccessToken()); + return Objects.equals(this.getId(), accessToken.getId()) && Objects.equals(this.accessToken, accessToken.getAccessToken()); } @Override public int hashCode() { - return Objects.hash(super.getId(), accessToken); + return Objects.hash(this.getId(), accessToken); } @Override public String toString() { return "AccessToken{" + - "id=" + super.getId() + + "id=" + id + ", accessToken='" + accessToken + '\'' + '}'; } diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/TRAcquisitionLock.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/TRAcquisitionLock.java index 3e5e7b7b..ac2560f9 100644 --- a/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/TRAcquisitionLock.java +++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/TRAcquisitionLock.java @@ -16,8 +16,13 @@ import java.util.Objects; query = "DELETE FROM TRAcquisitionLock tral WHERE tral.participantRefId = :participantRefId AND tral.trainingInstanceId = :trainingInstanceId" ) }) -public class TRAcquisitionLock extends AbstractEntity<Long> { +public class TRAcquisitionLock { + @Id + @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "trAcquisitionLockGenerator") + @SequenceGenerator(name = "trAcquisitionLockGenerator", sequenceName = "tr_acquisition_lock_seq") + @Column(name = "training_run_acquisition_lock_id", nullable = false, unique = true) + private Long id; @Column(name = "participant_ref_id") private Long participantRefId; @Column(name = "training_instance_id") @@ -44,12 +49,22 @@ public class TRAcquisitionLock extends AbstractEntity<Long> { this.creationTime = creationTime; } + /** + * Gets unique identification number of tr acquisition lock + * + * @return the id + */ public Long getId() { - return super.getId(); + return id; } + /** + * Sets unique identification number of tr acquisition lock + * + * @param id the id + */ public void setId(Long id) { - super.setId(id); + this.id = id; } /** @@ -124,7 +139,7 @@ public class TRAcquisitionLock extends AbstractEntity<Long> { @Override public String toString() { return "TRAcquisitionLock{" + - "id=" + super.getId() + + "id=" + id + ", participantRefId=" + participantRefId + ", trainingInstanceId=" + trainingInstanceId + ", creationTime=" + creationTime + diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/UserRef.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/UserRef.java index e312c32f..ab89e57c 100644 --- a/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/UserRef.java +++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/UserRef.java @@ -31,8 +31,13 @@ import java.util.Set; "WHERE ti.id = :trainingInstanceId" ) }) -public class UserRef extends AbstractEntity<Long> { +public class UserRef { + @Id + @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "userRefGenerator") + @SequenceGenerator(name = "userRefGenerator", sequenceName = "user_ref_seq") + @Column(name = "id", nullable = false, unique = true) + private Long id; @Column(name = "user_ref_id", nullable = false) private Long userRefId; @ManyToMany(mappedBy = "organizers", fetch = FetchType.LAZY) @@ -60,7 +65,7 @@ public class UserRef extends AbstractEntity<Long> { * @return the id */ public Long getId() { - return super.getId(); + return id; } /** @@ -69,7 +74,7 @@ public class UserRef extends AbstractEntity<Long> { * @param id the id */ public void setId(Long id) { - super.setId(id); + this.id = id; } /** @@ -178,7 +183,7 @@ public class UserRef extends AbstractEntity<Long> { @Override public String toString() { return "UserRef{" + - "id=" + super.getId() + + "id=" + id + ", userRefId=" + userRefId + '}'; } diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/phase/AbstractPhase.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/phase/AbstractPhase.java index 33a0fa46..be1e6374 100644 --- a/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/phase/AbstractPhase.java +++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/phase/AbstractPhase.java @@ -26,6 +26,7 @@ public abstract class AbstractPhase implements Serializable { private Integer order; @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "training_definition_id") private TrainingDefinition trainingDefinition; public String getTitle() { diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/phase/DecisionMatrixRow.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/phase/DecisionMatrixRow.java index ba11c914..fe956a88 100644 --- a/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/phase/DecisionMatrixRow.java +++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/phase/DecisionMatrixRow.java @@ -13,7 +13,6 @@ public class DecisionMatrixRow implements Serializable { @SequenceGenerator(name = "decisionMatrixRowGenerator", sequenceName = "decision_matrix_row_seq") @Column(name = "decision_matrix_row_id", nullable = false, unique = true) private Long id; - @Column(name = "order_in_training_phase", nullable = false) private int order; private double assessmentAnswered; diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/training/TrainingDefinition.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/training/TrainingDefinition.java index 69753683..760f0eeb 100644 --- a/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/training/TrainingDefinition.java +++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/training/TrainingDefinition.java @@ -1,6 +1,5 @@ package cz.muni.ics.kypo.training.adaptive.domain.training; -import cz.muni.ics.kypo.training.adaptive.domain.AbstractEntity; import cz.muni.ics.kypo.training.adaptive.domain.UserRef; import cz.muni.ics.kypo.training.adaptive.enums.TDState; @@ -26,8 +25,13 @@ import java.util.*; "WHERE aut.userRefId = :userRefId AND td.state = 'UNRELEASED'" ) }) -public class TrainingDefinition extends AbstractEntity<Long> { +public class TrainingDefinition { + @Id + @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "trainingDefinitionGenerator") + @SequenceGenerator(name = "trainingDefinitionGenerator", sequenceName = "training_definition_seq") + @Column(name = "training_definition_id", nullable = false, unique = true) + private Long id; @Column(name = "title", nullable = false) private String title; @Column(name = "description", nullable = true) @@ -58,7 +62,7 @@ public class TrainingDefinition extends AbstractEntity<Long> { * @return the id */ public Long getId() { - return super.getId(); + return id; } /** @@ -67,7 +71,7 @@ public class TrainingDefinition extends AbstractEntity<Long> { * @param id the id */ public void setId(Long id) { - super.setId(id); + this.id = id; } /** @@ -279,7 +283,7 @@ public class TrainingDefinition extends AbstractEntity<Long> { @Override public String toString() { return "TrainingDefinition{" + - "id=" + super.getId() + + "id=" + id + ", title='" + title + '\'' + ", description='" + description + '\'' + ", prerequisites=" + Arrays.toString(prerequisites) + diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/training/TrainingInstance.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/training/TrainingInstance.java index 5e805352..e69604c4 100644 --- a/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/training/TrainingInstance.java +++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/training/TrainingInstance.java @@ -1,6 +1,5 @@ package cz.muni.ics.kypo.training.adaptive.domain.training; -import cz.muni.ics.kypo.training.adaptive.domain.AbstractEntity; import cz.muni.ics.kypo.training.adaptive.domain.UserRef; import javax.persistence.*; @@ -70,8 +69,13 @@ import java.util.Set; query = "SELECT (COUNT(ti) > 0) FROM TrainingInstance ti WHERE ti.id = :instanceId AND ti.endTime < :currentTime" ) }) -public class TrainingInstance extends AbstractEntity<Long> { +public class TrainingInstance { + @Id + @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "trainingInstanceGenerator") + @SequenceGenerator(name = "trainingInstanceGenerator", sequenceName = "training_instance_seq") + @Column(name = "training_instance_id", nullable = false, unique = true) + private Long id; @Column(name = "start_time", nullable = false) private LocalDateTime startTime; @Column(name = "end_time", nullable = false) @@ -83,6 +87,7 @@ public class TrainingInstance extends AbstractEntity<Long> { @Column(name = "access_token", nullable = false, unique = true) private String accessToken; @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "training_definition_id") private TrainingDefinition trainingDefinition; @ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST) @JoinTable(name = "training_instance_user_ref", @@ -97,7 +102,7 @@ public class TrainingInstance extends AbstractEntity<Long> { * @return the id */ public Long getId() { - return super.getId(); + return id; } /** @@ -106,7 +111,7 @@ public class TrainingInstance extends AbstractEntity<Long> { * @param id the id */ public void setId(Long id) { - super.setId(id); + this.id = id; } /** @@ -278,7 +283,7 @@ public class TrainingInstance extends AbstractEntity<Long> { @Override public String toString() { return "TrainingInstance{" + - "id=" + super.getId() + + "id=" + id + ", startTime=" + startTime + ", endTime=" + endTime + ", title='" + title + '\'' + diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/training/TrainingRun.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/training/TrainingRun.java index 42a8bc2b..7f0e4c91 100644 --- a/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/training/TrainingRun.java +++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/training/TrainingRun.java @@ -1,12 +1,10 @@ package cz.muni.ics.kypo.training.adaptive.domain.training; -import cz.muni.ics.kypo.training.adaptive.domain.AbstractEntity; import cz.muni.ics.kypo.training.adaptive.domain.UserRef; import cz.muni.ics.kypo.training.adaptive.domain.phase.AbstractPhase; import cz.muni.ics.kypo.training.adaptive.domain.phase.InfoPhase; import cz.muni.ics.kypo.training.adaptive.domain.phase.Task; import cz.muni.ics.kypo.training.adaptive.enums.TRState; -import org.hibernate.annotations.Type; import javax.persistence.*; import java.time.LocalDateTime; @@ -94,8 +92,13 @@ import java.util.Objects; "WHERE td.id = :trainingDefinitionId" ) }) -public class TrainingRun extends AbstractEntity<Long> { +public class TrainingRun { + @Id + @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "trainingRunGenerator") + @SequenceGenerator(name = "trainingRunGenerator", sequenceName = "training_run_seq") + @Column(name = "training_run_id", nullable = false, unique = true) + private Long id; @Column(name = "start_time", nullable = false) private LocalDateTime startTime; @Column(name = "end_time", nullable = false) @@ -114,6 +117,7 @@ public class TrainingRun extends AbstractEntity<Long> { @JoinColumn(name = "current_task_id") private Task currentTask; @ManyToOne(fetch = FetchType.LAZY, optional = false) + @JoinColumn(name = "training_instance_id") private TrainingInstance trainingInstance; @Column(name = "sandbox_instance_ref_id") private Long sandboxInstanceRefId; @@ -131,7 +135,7 @@ public class TrainingRun extends AbstractEntity<Long> { * @return the id */ public Long getId() { - return super.getId(); + return id; } /** @@ -140,7 +144,7 @@ public class TrainingRun extends AbstractEntity<Long> { * @param id the id */ public void setId(Long id) { - super.setId(id); + this.id = id; } /** @@ -381,7 +385,7 @@ public class TrainingRun extends AbstractEntity<Long> { @Override public String toString() { return "TrainingRun{" + - "id=" + super.getId() + + "id=" + id + ", startTime=" + startTime + ", endTime=" + endTime + ", state=" + state + diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/repository/training/TrainingDefinitionRepositoryImpl.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/repository/training/TrainingDefinitionRepositoryImpl.java index f94d313b..cb3313a9 100644 --- a/src/main/java/cz/muni/ics/kypo/training/adaptive/repository/training/TrainingDefinitionRepositoryImpl.java +++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/repository/training/TrainingDefinitionRepositoryImpl.java @@ -40,11 +40,10 @@ public class TrainingDefinitionRepositoryImpl extends QuerydslRepositorySupport Objects.requireNonNull(loggedInUserId, "Input logged in user ID must not be null."); QTrainingDefinition trainingDefinition = QTrainingDefinition.trainingDefinition; QUserRef authors = new QUserRef("authors"); - QUserRef organizers = new QUserRef("organizers"); JPQLQuery<TrainingDefinition> query = new JPAQueryFactory(entityManager).selectFrom(trainingDefinition).distinct() .leftJoin(trainingDefinition.authors, authors) - .where(authors.userRefId.eq(loggedInUserId).or(organizers.userRefId.eq(loggedInUserId))); + .where(authors.userRefId.eq(loggedInUserId)); if (predicate != null) { query.where(predicate); diff --git a/src/main/resources/db/migration/V1__db_adaptive_trainings_schema.sql b/src/main/resources/db/migration/V1__db_adaptive_trainings_schema.sql index 14d59308..4067d602 100644 --- a/src/main/resources/db/migration/V1__db_adaptive_trainings_schema.sql +++ b/src/main/resources/db/migration/V1__db_adaptive_trainings_schema.sql @@ -1,13 +1,13 @@ -- USER_REF create table user_ref ( - id bigserial not null, + id bigserial not null, user_ref_id int8 not null, primary key (id) ); -- TRAINING create table training_definition ( - id bigserial not null, + training_definition_id bigserial not null, description text, last_edited timestamp not null, estimated_duration int8, @@ -16,7 +16,7 @@ create table training_definition ( show_stepper_bar boolean not null, state varchar(128) not null, title varchar(255) not null, - primary key (id) + primary key (training_definition_id) ); create table training_definition_user_ref ( @@ -28,14 +28,14 @@ create table training_definition_user_ref ( ); create table training_instance ( - id bigserial not null, + training_instance_id bigserial not null, access_token varchar(255) not null, end_time timestamp not null, pool_id int8, start_time timestamp not null, title varchar(255) not null, training_definition_id int8, - primary key (id), + primary key (training_instance_id), foreign key (training_definition_id) references training_definition ); @@ -50,7 +50,7 @@ create table training_instance_user_ref ( ); create table training_run ( - id bigserial not null, + training_run_id bigserial not null, questionnaire_responses text, end_time timestamp not null, incorrect_answer_count int4 not null, @@ -64,14 +64,14 @@ create table training_run ( sandbox_instance_ref_id int8 null, training_instance_id int8 not null, previous_sandbox_instance_ref_id int8 null, - primary key (id), + primary key (training_instance_id), foreign key (training_instance_id) references training_instance, foreign key (user_ref_id) references user_ref ); -- PHASES create table abstract_phase ( - phase_id bigserial not null, + phase_id bigserial not null, title varchar(255) not null, order_in_training_definition int4 not null, training_definition_id int8, @@ -81,7 +81,7 @@ create table abstract_phase ( -- INFO PHASE create table info_phase ( - phase_id bigserial not null, + phase_id bigserial not null, content text not null, primary key (phase_id), foreign key (phase_id) references abstract_phase @@ -89,7 +89,7 @@ create table info_phase ( -- TRAINING PHASE create table training_phase ( - phase_id bigserial not null, + phase_id bigserial not null, estimated_duration int4 not null, allowed_commands int4 , allowed_wrong_answers int4 not null, @@ -127,14 +127,14 @@ create table decision_matrix_row ( -- QUESTIONNAIRE PHASE create table questionnaire_phase ( - phase_id bigserial not null, + phase_id bigserial not null, questionnaire_type varchar(32), primary key (phase_id), foreign key (phase_id) references abstract_phase ); create table question ( - question_id bigserial not null, + question_id bigserial not null, question_type varchar(64) not null, order_in_questionnaire int4 not null, text text not null, @@ -144,7 +144,7 @@ create table question ( ); create table question_choice ( - question_choice_id bigserial not null, + question_choice_id bigserial not null, correct boolean not null, text text not null, order_in_question int4 not null, @@ -173,7 +173,7 @@ create table question_phase_relation_question ( ); create table question_answer ( - question_id int8 not null, + question_id int8 not null, training_run_id int8 not null, answer varchar(255) not null, primary key (question_id, training_run_id), @@ -183,7 +183,7 @@ create table question_answer ( ); create table question_phase_result ( - question_phase_result_id bigserial not null, + question_phase_result_id bigserial not null, training_run_id int8 not null, question_phase_relation_id int8 not null, achieved_result int4 not null, @@ -193,18 +193,18 @@ create table question_phase_result ( -- ACCESS TOKEN create table access_token ( - id bigserial not null, + access_token_id bigserial not null, access_token varchar(255) not null, - primary key (id) + primary key (access_token_id) ); -- ACQUISITION LOCK create table training_run_acquisition_lock ( - id bigserial not null, + training_run_acquisition_lock_id bigserial not null, participant_ref_id int8 not null, training_instance_id int8 not null, creation_time timestamp not null, - primary key (id), + primary key (training_run_acquisition_lock_id), foreign key (participant_ref_id) references user_ref, foreign key (training_instance_id) references training_instance ); diff --git a/src/main/resources/db/migration/V2__db_adaptive_trainings_sequences.sql b/src/main/resources/db/migration/V2__db_adaptive_trainings_sequences.sql index 1f09c3ec..09188e55 100644 --- a/src/main/resources/db/migration/V2__db_adaptive_trainings_sequences.sql +++ b/src/main/resources/db/migration/V2__db_adaptive_trainings_sequences.sql @@ -5,3 +5,9 @@ CREATE SEQUENCE question_choice_seq AS bigint INCREMENT 50 MINVALUE 1; CREATE SEQUENCE question_phase_seq AS bigint INCREMENT 50 MINVALUE 1; CREATE SEQUENCE decision_matrix_row_seq AS bigint INCREMENT 50 MINVALUE 1; CREATE SEQUENCE question_phase_result_seq AS bigint INCREMENT 50 MINVALUE 1; +CREATE SEQUENCE training_definition_seq AS bigint INCREMENT 50 MINVALUE 1; +CREATE SEQUENCE training_instance_seq AS bigint INCREMENT 50 MINVALUE 1; +CREATE SEQUENCE training_run_seq AS bigint INCREMENT 50 MINVALUE 1; +CREATE SEQUENCE access_token_seq AS bigint INCREMENT 50 MINVALUE 1; +CREATE SEQUENCE tr_acquisition_lock_seq AS bigint INCREMENT 50 MINVALUE 1; +CREATE SEQUENCE user_ref_seq AS bigint INCREMENT 50 MINVALUE 1; -- GitLab