Спящий режим Java. Проблема с коллекцией OneToManyJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Спящий режим Java. Проблема с коллекцией OneToMany

Сообщение Anonymous »

У меня есть две сущности:

Код: Выделить всё

@Setter
@Getter
@Entity
@Table(name = "Task")
@NoArgsConstructor
public class TaskEntity implements AbstractEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;

@Column(name = "mapName")
private String mapName;

@Column(name = "mapPath")
private String mapPath;

@Column(name = "mapCost")
private String mapCost;

@Column(name = "mapCostResult")
private String mapCostResult;

@Enumerated(EnumType.STRING)
@Column(name = "taskStatus")
private TaskStatus taskStatus;

@ManyToOne(fetch = FetchType.EAGER, cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinColumn(name = "ticketId")
private TicketEntity ticket;

@ManyToMany(fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinTable(
name = "Builder_Task",
joinColumns = @JoinColumn(name = "taskId"),
inverseJoinColumns = @JoinColumn(name = "builderDiscordId")
)
private Set builders = new HashSet();

public @NotNull TaskEntity addBuilder(@NotNull BuilderEntity builderEntity) {
builders.add(builderEntity);
return this;
}

public @NotNull TaskEntity removeBuilder(@NotNull BuilderEntity builderEntity) {
builders.remove(builderEntity);
return this;
}
}
и

Код: Выделить всё

@Setter
@Getter
@Entity
@Table(name = "Ticket")
@NoArgsConstructor
public class TicketEntity implements AbstractEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;

@Column(name = "channelId", unique = true)
private String channelId;

@Column(name = "creatorName")
private String creatorName;

@Column(name = "creationDate")
@CreationTimestamp
private Timestamp creationDate;

@Column(name = "deadline", columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP")
private Timestamp deadline;

@Column(name = "available")
private boolean available;

@Column(name = "mapsAmount")
private int mapsAmount;

@OneToMany(fetch = FetchType.EAGER, mappedBy = "ticket", cascade = CascadeType.ALL, orphanRemoval = true)
@OrderColumn(name = "ticketId")
private Set tasks = new HashSet();

public @NotNull TicketEntity addTask(@NotNull TaskEntity taskEntity) {
tasks.add(taskEntity);
return this;
}

public @NotNull TicketEntity removeTask(@NotNull TaskEntity taskEntity) {
tasks.remove(taskEntity);
return this;
}
}
Вот мой сервис и репозиторий:

Код: Выделить всё

public class TicketRepository implements CRUDRepository {
// Only needed function for question
@Override
public @NotNull TicketEntity update(@NotNull TicketEntity ticketEntity) {
Transaction transaction = null;
try (Session session = HibernateUtil.getSessionFactory().openSession()) {
transaction = session.beginTransaction();
session.merge(ticketEntity);
transaction.commit();
return ticketEntity;
} catch (Exception e) {
if (transaction != null) {
transaction.rollback();
}
throw e;
}
}
}

public class TicketService {
public @NotNull Optional addTask(@NotNull Integer ticketId, @NotNull TaskEntity task) {
return updateTicketEntity(ticketId, ticketEntity -> {
ticketEntity.addTask(task);
task.setTicket(ticketEntity);
});
}
private @NotNull Optional updateTicketEntity(@NotNull Integer ticketId, @NotNull Consumer updater) {
Optional entity = findById(ticketId);
return Preconditions.checkAndReturn(entity.isPresent(),
() ->  {
TicketEntity ticketEntity = entity.get();
updater.accept(ticketEntity);
TicketEntity savedEntity = ticketRepository.update(ticketEntity);
ticketCache.put(ticketId, savedEntity);
return Optional.of(savedEntity);
},
Optional::empty);
}
}
Итак, когда я добавляю значение TaskEntity в задачи TicketEntity Сбор и слияние с базой данных, то все значения, которые были в задачах, сохраняются, но с новым идентификатором
< img alt="введите здесь описание изображения" src="https://i.sstatic.net/UD4N811E.png" />
(11 — первое сохранение, 12 — второе). Все, что мне нужно, это сохранить коллекцию, но без дубликатов.

Подробнее здесь: https://stackoverflow.com/questions/792 ... on-problem
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»