remove deprecated usage of saveOrUpdate in preparation of hibernate 7

This commit is contained in:
Athou
2025-06-13 07:33:51 +02:00
parent f2c0d99bd9
commit d46ee7f673
12 changed files with 24 additions and 44 deletions

View File

@@ -5,7 +5,6 @@ import java.util.Collection;
import jakarta.persistence.EntityManager; import jakarta.persistence.EntityManager;
import org.hibernate.Session;
import org.hibernate.jpa.SpecHints; import org.hibernate.jpa.SpecHints;
import com.commafeed.backend.model.AbstractModel; import com.commafeed.backend.model.AbstractModel;
@@ -35,15 +34,6 @@ public abstract class GenericDAO<T extends AbstractModel> {
return new JPADeleteClause(entityManager, entityPath); return new JPADeleteClause(entityManager, entityPath);
} }
@SuppressWarnings("deprecation")
public void saveOrUpdate(T model) {
entityManager.unwrap(Session.class).saveOrUpdate(model);
}
public void saveOrUpdate(Collection<T> models) {
models.forEach(this::saveOrUpdate);
}
public void persist(T model) { public void persist(T model) {
entityManager.persist(model); entityManager.persist(model);
} }

View File

@@ -57,7 +57,7 @@ public class OPMLImporter {
category.setParent(parent); category.setParent(parent);
category.setUser(user); category.setUser(user);
category.setPosition(position); category.setPosition(position);
feedCategoryDAO.saveOrUpdate(category); feedCategoryDAO.persist(category);
} }
for (int i = 0; i < children.size(); i++) { for (int i = 0; i < children.size(); i++) {

View File

@@ -35,7 +35,7 @@ public class FeedEntryContentService {
if (existing.isPresent()) { if (existing.isPresent()) {
return existing.get(); return existing.get();
} else { } else {
feedEntryContentDAO.saveOrUpdate(entryContent); feedEntryContentDAO.persist(entryContent);
return entryContent; return entryContent;
} }
} }

View File

@@ -48,7 +48,7 @@ public class FeedEntryService {
feedEntry.setFeed(feed); feedEntry.setFeed(feed);
feedEntry.setContent(feedEntryContentService.findOrCreate(entry.content(), feed.getLink())); feedEntry.setContent(feedEntryContentService.findOrCreate(entry.content(), feed.getLink()));
feedEntryDAO.saveOrUpdate(feedEntry); feedEntryDAO.persist(feedEntry);
return feedEntry; return feedEntry;
} }
@@ -63,7 +63,7 @@ public class FeedEntryService {
if (!matches) { if (!matches) {
FeedEntryStatus status = new FeedEntryStatus(sub.getUser(), sub, entry); FeedEntryStatus status = new FeedEntryStatus(sub.getUser(), sub, entry);
status.setRead(true); status.setRead(true);
feedEntryStatusDAO.saveOrUpdate(status); feedEntryStatusDAO.persist(status);
} }
return matches; return matches;
@@ -83,7 +83,7 @@ public class FeedEntryService {
FeedEntryStatus status = feedEntryStatusDAO.getStatus(user, sub, entry); FeedEntryStatus status = feedEntryStatusDAO.getStatus(user, sub, entry);
if (status.isMarkable()) { if (status.isMarkable()) {
status.setRead(read); status.setRead(read);
feedEntryStatusDAO.saveOrUpdate(status); feedEntryStatusDAO.merge(status);
} }
} }
@@ -101,7 +101,7 @@ public class FeedEntryService {
FeedEntryStatus status = feedEntryStatusDAO.getStatus(user, sub, entry); FeedEntryStatus status = feedEntryStatusDAO.getStatus(user, sub, entry);
status.setStarred(starred); status.setStarred(starred);
feedEntryStatusDAO.saveOrUpdate(status); feedEntryStatusDAO.merge(status);
} }
public void markSubscriptionEntries(User user, List<FeedSubscription> subscriptions, Instant olderThan, Instant insertedBefore, public void markSubscriptionEntries(User user, List<FeedSubscription> subscriptions, Instant olderThan, Instant insertedBefore,
@@ -125,7 +125,9 @@ public class FeedEntryService {
return insertedBefore == null || insertedDate == null || insertedDate.isBefore(insertedBefore); return insertedBefore == null || insertedDate == null || insertedDate.isBefore(insertedBefore);
}).toList(); }).toList();
statusesToMark.forEach(s -> s.setRead(true)); statusesToMark.forEach(s -> {
feedEntryStatusDAO.saveOrUpdate(statusesToMark); s.setRead(true);
feedEntryStatusDAO.merge(s);
});
} }
} }

View File

@@ -36,7 +36,7 @@ public class FeedEntryTagService {
.toList(); .toList();
List<FeedEntryTag> removeList = existingTags.stream().filter(tag -> !tagNames.contains(tag.getName())).toList(); List<FeedEntryTag> removeList = existingTags.stream().filter(tag -> !tagNames.contains(tag.getName())).toList();
feedEntryTagDAO.saveOrUpdate(addList); addList.forEach(feedEntryTagDAO::persist);
feedEntryTagDAO.delete(removeList); feedEntryTagDAO.delete(removeList);
} }

View File

@@ -72,7 +72,6 @@ public class FeedSubscriptionService {
// upgrade feed to https if it was using http // upgrade feed to https if it was using http
if (FeedUtils.isHttp(feed.getUrl()) && FeedUtils.isHttps(url)) { if (FeedUtils.isHttp(feed.getUrl()) && FeedUtils.isHttps(url)) {
feed.setUrl(url); feed.setUrl(url);
feedDAO.saveOrUpdate(feed);
} }
FeedSubscription sub = feedSubscriptionDAO.findByFeed(user, feed); FeedSubscription sub = feedSubscriptionDAO.findByFeed(user, feed);
@@ -84,9 +83,7 @@ public class FeedSubscriptionService {
sub.setCategory(category); sub.setCategory(category);
sub.setPosition(position); sub.setPosition(position);
sub.setTitle(FeedUtils.truncate(title, 128)); sub.setTitle(FeedUtils.truncate(title, 128));
feedSubscriptionDAO.saveOrUpdate(sub); return feedSubscriptionDAO.merge(sub).getId();
return sub.getId();
} }
public boolean unsubscribe(User user, Long subId) { public boolean unsubscribe(User user, Long subId) {

View File

@@ -132,9 +132,9 @@ public class UserService {
user.setCreated(Instant.now()); user.setCreated(Instant.now());
user.setSalt(salt); user.setSalt(salt);
user.setPassword(encryptionService.getEncryptedPassword(password, salt)); user.setPassword(encryptionService.getEncryptedPassword(password, salt));
userDAO.saveOrUpdate(user); userDAO.persist(user);
for (Role role : roles) { for (Role role : roles) {
userRoleDAO.saveOrUpdate(new UserRole(user, role)); userRoleDAO.persist(new UserRole(user, role));
} }
return user; return user;
} }

View File

@@ -24,7 +24,7 @@ public class PostLoginActivities {
Instant lastLogin = user.getLastLogin(); Instant lastLogin = user.getLastLogin();
if (lastLogin == null || ChronoUnit.MINUTES.between(lastLogin, now) >= 30) { if (lastLogin == null || ChronoUnit.MINUTES.between(lastLogin, now) >= 30) {
user.setLastLogin(now); user.setLastLogin(now);
unitOfWork.run(() -> userDAO.saveOrUpdate(user)); unitOfWork.run(() -> userDAO.merge(user));
} }
} }
} }

View File

@@ -97,11 +97,10 @@ public class AdminREST {
} }
u.setEmail(req.getEmail()); u.setEmail(req.getEmail());
u.setDisabled(!req.isEnabled()); u.setDisabled(!req.isEnabled());
userDAO.saveOrUpdate(u);
Set<Role> roles = userRoleDAO.findRoles(u); Set<Role> roles = userRoleDAO.findRoles(u);
if (req.isAdmin() && !roles.contains(Role.ADMIN)) { if (req.isAdmin() && !roles.contains(Role.ADMIN)) {
userRoleDAO.saveOrUpdate(new UserRole(u, Role.ADMIN)); userRoleDAO.persist(new UserRole(u, Role.ADMIN));
} else if (!req.isAdmin() && roles.contains(Role.ADMIN)) { } else if (!req.isAdmin() && roles.contains(Role.ADMIN)) {
if (CommaFeedApplication.USERNAME_ADMIN.equals(u.getName())) { if (CommaFeedApplication.USERNAME_ADMIN.equals(u.getName())) {
return Response.status(Status.FORBIDDEN).entity("You cannot remove the admin role from the admin user.").build(); return Response.status(Status.FORBIDDEN).entity("You cannot remove the admin role from the admin user.").build();

View File

@@ -291,7 +291,7 @@ public class CategoryREST {
parent.setId(Long.valueOf(parentId)); parent.setId(Long.valueOf(parentId));
cat.setParent(parent); cat.setParent(parent);
} }
feedCategoryDAO.saveOrUpdate(cat); feedCategoryDAO.persist(cat);
return Response.ok(cat.getId()).build(); return Response.ok(cat.getId()).build();
} }
@@ -311,14 +311,13 @@ public class CategoryREST {
for (FeedSubscription sub : subs) { for (FeedSubscription sub : subs) {
sub.setCategory(null); sub.setCategory(null);
} }
feedSubscriptionDAO.saveOrUpdate(subs);
List<FeedCategory> categories = feedCategoryDAO.findAllChildrenCategories(user, cat); List<FeedCategory> categories = feedCategoryDAO.findAllChildrenCategories(user, cat);
for (FeedCategory child : categories) { for (FeedCategory child : categories) {
if (!child.getId().equals(cat.getId()) && child.getParent().getId().equals(cat.getId())) { if (!child.getId().equals(cat.getId()) && child.getParent().getId().equals(cat.getId())) {
child.setParent(null); child.setParent(null);
} }
} }
feedCategoryDAO.saveOrUpdate(categories);
feedCategoryDAO.delete(cat); feedCategoryDAO.delete(cat);
return Response.ok().build(); return Response.ok().build();
@@ -330,7 +329,7 @@ public class CategoryREST {
@POST @POST
@Path("/modify") @Path("/modify")
@Transactional @Transactional
@Operation(summary = "Rename a category", description = "Rename an existing feed category") @Operation(summary = "Modify a category", description = "Modify an existing feed category")
public Response modifyCategory(@Valid @Parameter(required = true) CategoryModificationRequest req) { public Response modifyCategory(@Valid @Parameter(required = true) CategoryModificationRequest req) {
Preconditions.checkNotNull(req); Preconditions.checkNotNull(req);
Preconditions.checkNotNull(req.getId()); Preconditions.checkNotNull(req.getId());
@@ -367,12 +366,8 @@ public class CategoryREST {
for (int i = 0; i < categories.size(); i++) { for (int i = 0; i < categories.size(); i++) {
categories.get(i).setPosition(i); categories.get(i).setPosition(i);
} }
feedCategoryDAO.saveOrUpdate(categories);
} else {
feedCategoryDAO.saveOrUpdate(category);
} }
feedCategoryDAO.saveOrUpdate(category);
return Response.ok().build(); return Response.ok().build();
} }
@@ -390,7 +385,7 @@ public class CategoryREST {
return Response.status(Status.NOT_FOUND).build(); return Response.status(Status.NOT_FOUND).build();
} }
category.setCollapsed(req.isCollapse()); category.setCollapsed(req.isCollapse());
feedCategoryDAO.saveOrUpdate(category);
return Response.ok().build(); return Response.ok().build();
} }

View File

@@ -460,10 +460,8 @@ public class FeedREST {
for (int i = 0; i < subs.size(); i++) { for (int i = 0; i < subs.size(); i++) {
subs.get(i).setPosition(i); subs.get(i).setPosition(i);
} }
feedSubscriptionDAO.saveOrUpdate(subs);
} else {
feedSubscriptionDAO.saveOrUpdate(subscription);
} }
return Response.ok().build(); return Response.ok().build();
} }

View File

@@ -198,7 +198,7 @@ public class UserREST {
s.setInstapaper(settings.getSharingSettings().isInstapaper()); s.setInstapaper(settings.getSharingSettings().isInstapaper());
s.setBuffer(settings.getSharingSettings().isBuffer()); s.setBuffer(settings.getSharingSettings().isBuffer());
userSettingsDAO.saveOrUpdate(s); userSettingsDAO.merge(s);
return Response.ok().build(); return Response.ok().build();
} }
@@ -261,7 +261,7 @@ public class UserREST {
user.setApiKey(userService.generateApiKey(user)); user.setApiKey(userService.generateApiKey(user));
} }
userDAO.saveOrUpdate(user); userDAO.merge(user);
return Response.ok().build(); return Response.ok().build();
} }
@@ -297,7 +297,7 @@ public class UserREST {
try { try {
user.setRecoverPasswordToken(Digests.sha1Hex(UUID.randomUUID().toString())); user.setRecoverPasswordToken(Digests.sha1Hex(UUID.randomUUID().toString()));
user.setRecoverPasswordTokenDate(Instant.now()); user.setRecoverPasswordTokenDate(Instant.now());
userDAO.saveOrUpdate(user);
mailService.sendMail(user, "Password recovery", buildEmailContent(user)); mailService.sendMail(user, "Password recovery", buildEmailContent(user));
return Response.ok().build(); return Response.ok().build();
} catch (Exception e) { } catch (Exception e) {
@@ -351,7 +351,6 @@ public class UserREST {
} }
user.setRecoverPasswordToken(null); user.setRecoverPasswordToken(null);
user.setRecoverPasswordTokenDate(null); user.setRecoverPasswordTokenDate(null);
userDAO.saveOrUpdate(user);
String message = "Your new password is: " + passwd; String message = "Your new password is: " + passwd;
message += "<br />"; message += "<br />";