diff --git a/.github/workflows/build_containers.yml b/.github/workflows/build_containers.yml
index f3d73b627c4d..ff3df830ba44 100644
--- a/.github/workflows/build_containers.yml
+++ b/.github/workflows/build_containers.yml
@@ -38,7 +38,7 @@ jobs:
labels: ${{ steps.meta.outputs.labels }}
build-args: |
BASE=registry.opensuse.org/uyuni/server
- VERSION=2024.08
+ VERSION=2024.12
build-and-push-ubuntu-minion-image:
runs-on: ubuntu-latest
permissions:
diff --git a/client/rhel/spacewalk-client-tools/po/Makefile b/client/rhel/spacewalk-client-tools/po/Makefile
index b7150d619c68..f460d4fe1ed3 100644
--- a/client/rhel/spacewalk-client-tools/po/Makefile
+++ b/client/rhel/spacewalk-client-tools/po/Makefile
@@ -34,7 +34,7 @@ INSTALL_DATA = ${INSTALL} -m 644
GMSGFMT = /usr/bin/msgfmt
MSGFMT = /usr/bin/msgfmt
-MSGMERGE = /usr/bin/msgmerge --previous --no-wrap
+MSGMERGE = /usr/bin/msgmerge --previous
INCLUDES = -I.. -I$(top_srcdir)/intl
diff --git a/client/rhel/spacewalk-client-tools/spacewalk-client-tools.changes.mcalmer.remove-no-wrap-for-translations b/client/rhel/spacewalk-client-tools/spacewalk-client-tools.changes.mcalmer.remove-no-wrap-for-translations
new file mode 100644
index 000000000000..24308de95dae
--- /dev/null
+++ b/client/rhel/spacewalk-client-tools/spacewalk-client-tools.changes.mcalmer.remove-no-wrap-for-translations
@@ -0,0 +1 @@
+- Allow translation to wrap strings as weblate force it
diff --git a/java/buildconf/checkstyle.xml b/java/buildconf/checkstyle.xml
index 8f6dca76d3e3..364897402242 100644
--- a/java/buildconf/checkstyle.xml
+++ b/java/buildconf/checkstyle.xml
@@ -124,7 +124,9 @@
-
+
+
+
diff --git a/java/code/src/com/redhat/rhn/common/hibernate/AnnotationRegistry.java b/java/code/src/com/redhat/rhn/common/hibernate/AnnotationRegistry.java
index cfdab5188f62..b56d0065ab93 100644
--- a/java/code/src/com/redhat/rhn/common/hibernate/AnnotationRegistry.java
+++ b/java/code/src/com/redhat/rhn/common/hibernate/AnnotationRegistry.java
@@ -14,12 +14,21 @@
*/
package com.redhat.rhn.common.hibernate;
+import com.redhat.rhn.domain.channel.AccessToken;
import com.redhat.rhn.domain.channel.AppStream;
import com.redhat.rhn.domain.channel.AppStreamApi;
+import com.redhat.rhn.domain.channel.AppStreamApiKey;
+import com.redhat.rhn.domain.channel.Channel;
+import com.redhat.rhn.domain.channel.ChannelArch;
import com.redhat.rhn.domain.channel.ChannelSyncFlag;
+import com.redhat.rhn.domain.channel.ClonedChannel;
import com.redhat.rhn.domain.cloudpayg.CloudRmtHost;
import com.redhat.rhn.domain.cloudpayg.PaygCredentialsProduct;
import com.redhat.rhn.domain.cloudpayg.PaygSshData;
+import com.redhat.rhn.domain.common.ProvisionState;
+import com.redhat.rhn.domain.config.ConfigChannel;
+import com.redhat.rhn.domain.config.ConfigChannelType;
+import com.redhat.rhn.domain.config.ConfigFile;
import com.redhat.rhn.domain.contentmgmt.ContentEnvironment;
import com.redhat.rhn.domain.contentmgmt.ContentFilter;
import com.redhat.rhn.domain.contentmgmt.ContentProject;
@@ -53,8 +62,17 @@
import com.redhat.rhn.domain.image.ImageStoreType;
import com.redhat.rhn.domain.image.KiwiProfile;
import com.redhat.rhn.domain.image.ProfileCustomDataValue;
+import com.redhat.rhn.domain.kickstart.crypto.CryptoKey;
+import com.redhat.rhn.domain.kickstart.crypto.CryptoKeyType;
+import com.redhat.rhn.domain.kickstart.crypto.SslCryptoKey;
import com.redhat.rhn.domain.notification.NotificationMessage;
import com.redhat.rhn.domain.notification.UserNotification;
+import com.redhat.rhn.domain.org.Org;
+import com.redhat.rhn.domain.org.OrgAdminManagement;
+import com.redhat.rhn.domain.org.OrgConfig;
+import com.redhat.rhn.domain.org.TemplateString;
+import com.redhat.rhn.domain.org.usergroup.UserGroupImpl;
+import com.redhat.rhn.domain.org.usergroup.UserGroupMembers;
import com.redhat.rhn.domain.product.ChannelTemplate;
import com.redhat.rhn.domain.recurringactions.GroupRecurringAction;
import com.redhat.rhn.domain.recurringactions.MinionRecurringAction;
@@ -64,10 +82,13 @@
import com.redhat.rhn.domain.recurringactions.state.RecurringInternalState;
import com.redhat.rhn.domain.recurringactions.type.RecurringHighstate;
import com.redhat.rhn.domain.recurringactions.type.RecurringState;
+import com.redhat.rhn.domain.rhnpackage.PackageArch;
import com.redhat.rhn.domain.rhnpackage.PackageBreaks;
+import com.redhat.rhn.domain.rhnpackage.PackageCapability;
import com.redhat.rhn.domain.rhnpackage.PackageConflicts;
import com.redhat.rhn.domain.rhnpackage.PackageEnhances;
import com.redhat.rhn.domain.rhnpackage.PackageExtraTagsKeys;
+import com.redhat.rhn.domain.rhnpackage.PackageFile;
import com.redhat.rhn.domain.rhnpackage.PackageObsoletes;
import com.redhat.rhn.domain.rhnpackage.PackagePreDepends;
import com.redhat.rhn.domain.rhnpackage.PackageProvides;
@@ -75,6 +96,7 @@
import com.redhat.rhn.domain.rhnpackage.PackageRequires;
import com.redhat.rhn.domain.rhnpackage.PackageSuggests;
import com.redhat.rhn.domain.rhnpackage.PackageSupplements;
+import com.redhat.rhn.domain.role.RoleImpl;
import com.redhat.rhn.domain.scc.SCCOrderItem;
import com.redhat.rhn.domain.scc.SCCRegCacheItem;
import com.redhat.rhn.domain.scc.SCCRepository;
@@ -84,14 +106,37 @@
import com.redhat.rhn.domain.scc.SCCRepositoryNoAuth;
import com.redhat.rhn.domain.scc.SCCRepositoryTokenAuth;
import com.redhat.rhn.domain.scc.SCCSubscription;
+import com.redhat.rhn.domain.server.Capability;
+import com.redhat.rhn.domain.server.ClientCapability;
+import com.redhat.rhn.domain.server.ClientCapabilityId;
+import com.redhat.rhn.domain.server.CustomDataValue;
+import com.redhat.rhn.domain.server.EntitlementServerGroup;
+import com.redhat.rhn.domain.server.InstalledPackage;
+import com.redhat.rhn.domain.server.ManagedServerGroup;
+import com.redhat.rhn.domain.server.MinionServer;
+import com.redhat.rhn.domain.server.MinionServerFactory;
+import com.redhat.rhn.domain.server.MinionSummary;
+import com.redhat.rhn.domain.server.NetworkInterface;
import com.redhat.rhn.domain.server.Pillar;
+import com.redhat.rhn.domain.server.Server;
import com.redhat.rhn.domain.server.ServerAppStream;
+import com.redhat.rhn.domain.server.ServerGroup;
+import com.redhat.rhn.domain.server.ServerGroupType;
+import com.redhat.rhn.domain.server.ServerPath;
+import com.redhat.rhn.domain.server.ServerPathId;
import com.redhat.rhn.domain.server.ansible.AnsiblePath;
import com.redhat.rhn.domain.server.ansible.InventoryPath;
import com.redhat.rhn.domain.server.ansible.PlaybookPath;
import com.redhat.rhn.domain.server.virtualhostmanager.VirtualHostManagerNodeInfo;
import com.redhat.rhn.domain.task.Task;
+import com.redhat.rhn.domain.token.Token;
import com.redhat.rhn.domain.token.TokenChannelAppStream;
+import com.redhat.rhn.domain.user.AddressImpl;
+import com.redhat.rhn.domain.user.StateChange;
+import com.redhat.rhn.domain.user.legacy.PersonalInfo;
+import com.redhat.rhn.domain.user.legacy.UserImpl;
+import com.redhat.rhn.domain.user.legacy.UserInfo;
+import com.redhat.rhn.manager.system.ServerGroupManager;
import com.suse.cloud.domain.PaygDimensionComputation;
import com.suse.cloud.domain.PaygDimensionResult;
@@ -117,93 +162,139 @@ private AnnotationRegistry() {
}
private static final List> ANNOTATION_CLASSES = List.of(
- ImageStore.class,
- ImageStoreType.class,
- DockerfileProfile.class,
- KiwiProfile.class,
- ImageProfile.class,
- ProfileCustomDataValue.class,
- DeltaImageInfo.class,
- ImageFile.class,
- ImageInfo.class,
- ImageInfoCustomDataValue.class,
- ImageOverview.class,
- ImagePackage.class,
- ImageRepoDigest.class,
- VirtualHostManagerNodeInfo.class,
- NotificationMessage.class,
- UserNotification.class,
- SCCRepository.class,
- SCCSubscription.class,
- SCCOrderItem.class,
- ChannelTemplate.class,
- SCCRepositoryAuth.class,
- SCCRepositoryNoAuth.class,
- SCCRepositoryBasicAuth.class,
- SCCRepositoryTokenAuth.class,
- SCCRepositoryCloudRmtAuth.class,
- ContentProject.class,
- ContentEnvironment.class,
- ProjectSource.class,
- SoftwareProjectSource.class,
- ContentFilter.class,
- ContentProjectFilter.class,
- PackageFilter.class,
- ErrataFilter.class,
- ModuleFilter.class,
- PtfFilter.class,
- EnvironmentTarget.class,
- SoftwareEnvironmentTarget.class,
- ContentProjectHistoryEntry.class,
- PackageExtraTagsKeys.class,
- PackageProvides.class,
- PackageRequires.class,
- PackageRecommends.class,
- PackageObsoletes.class,
- PackageBreaks.class,
- PackageSupplements.class,
- PackageConflicts.class,
- PackageSuggests.class,
- PackagePreDepends.class,
- PackageEnhances.class,
- MinionRecurringAction.class,
- GroupRecurringAction.class,
- OrgRecurringAction.class,
- MaintenanceSchedule.class,
- MaintenanceCalendar.class,
- SCCRegCacheItem.class,
- AnsiblePath.class,
- InventoryPath.class,
- PlaybookPath.class,
- Pillar.class,
- CloudRmtHost.class,
- PaygSshData.class,
- PaygCredentialsProduct.class,
- Task.class,
- RecurringHighstate.class,
- RecurringState.class,
- RecurringConfigChannel.class,
- RecurringInternalState.class,
- InternalState.class,
- PaygDimensionComputation.class,
- PaygDimensionResult.class,
- BaseCredentials.class,
- CloudRMTCredentials.class,
- RegistryCredentials.class,
- ReportDBCredentials.class,
- RHUICredentials.class,
- SCCCredentials.class,
- VHMCredentials.class,
- ChannelSyncFlag.class,
- ServerCoCoAttestationConfig.class,
- ServerCoCoAttestationReport.class,
- CoCoEnvironmentTypeConverter.class,
- CoCoAttestationResult.class,
- CoCoResultTypeConverter.class,
- ServerAppStream.class,
- AppStream.class,
- AppStreamApi.class,
- TokenChannelAppStream.class
+ // do not add class at the endi, but keep the alphabetical order
+ AccessToken.class,
+ AddressImpl.class,
+ AnsiblePath.class,
+ AppStreamApi.class,
+ AppStreamApiKey.class,
+ AppStream.class,
+ BaseCredentials.class,
+ Capability.class,
+ ChannelArch.class,
+ Channel.class,
+ ChannelSyncFlag.class,
+ ChannelTemplate.class,
+ ClientCapability.class,
+ ClientCapabilityId.class,
+ ClonedChannel.class,
+ CloudRMTCredentials.class,
+ CloudRmtHost.class,
+ CoCoAttestationResult.class,
+ CoCoEnvironmentTypeConverter.class,
+ CoCoResultTypeConverter.class,
+ ConfigChannel.class,
+ ConfigChannelType.class,
+ ConfigFile.class,
+ ContentEnvironment.class,
+ ContentFilter.class,
+ ContentProject.class,
+ ContentProjectFilter.class,
+ ContentProjectHistoryEntry.class,
+ CryptoKey.class,
+ CryptoKeyType.class,
+ CustomDataValue.class,
+ DeltaImageInfo.class,
+ DockerfileProfile.class,
+ EntitlementServerGroup.class,
+ EnvironmentTarget.class,
+ ErrataFilter.class,
+ GroupRecurringAction.class,
+ ImageFile.class,
+ ImageInfo.class,
+ ImageInfoCustomDataValue.class,
+ ImageOverview.class,
+ ImagePackage.class,
+ ImageProfile.class,
+ ImageRepoDigest.class,
+ ImageStore.class,
+ ImageStoreType.class,
+ InstalledPackage.class,
+ InternalState.class,
+ InventoryPath.class,
+ KiwiProfile.class,
+ MaintenanceCalendar.class,
+ MaintenanceSchedule.class,
+ ManagedServerGroup.class,
+ MinionRecurringAction.class,
+ MinionServer.class,
+ MinionServerFactory.class,
+ MinionSummary.class,
+ ModuleFilter.class,
+ NetworkInterface.class,
+ NotificationMessage.class,
+ OrgAdminManagement.class,
+ Org.class,
+ OrgConfig.class,
+ OrgRecurringAction.class,
+ PackageArch.class,
+ PackageBreaks.class,
+ PackageCapability.class,
+ PackageConflicts.class,
+ PackageEnhances.class,
+ PackageExtraTagsKeys.class,
+ PackageFile.class,
+ PackageFilter.class,
+ PackageObsoletes.class,
+ PackagePreDepends.class,
+ PackageProvides.class,
+ PackageRecommends.class,
+ PackageRequires.class,
+ PackageSuggests.class,
+ PackageSupplements.class,
+ PaygCredentialsProduct.class,
+ PaygDimensionComputation.class,
+ PaygDimensionResult.class,
+ PaygSshData.class,
+ PersonalInfo.class,
+ Pillar.class,
+ PlaybookPath.class,
+ ProfileCustomDataValue.class,
+ ProjectSource.class,
+ ProvisionState.class,
+ PtfFilter.class,
+ RecurringConfigChannel.class,
+ RecurringHighstate.class,
+ RecurringInternalState.class,
+ RecurringState.class,
+ RegistryCredentials.class,
+ ReportDBCredentials.class,
+ RHUICredentials.class,
+ RoleImpl.class,
+ SCCCredentials.class,
+ SCCOrderItem.class,
+ SCCRegCacheItem.class,
+ SCCRepositoryAuth.class,
+ SCCRepositoryBasicAuth.class,
+ SCCRepository.class,
+ SCCRepositoryCloudRmtAuth.class,
+ SCCRepositoryNoAuth.class,
+ SCCRepositoryTokenAuth.class,
+ SCCSubscription.class,
+ ServerAppStream.class,
+ Server.class,
+ ServerCoCoAttestationConfig.class,
+ ServerCoCoAttestationReport.class,
+ ServerGroup.class,
+ ServerGroupManager.class,
+ ServerGroupType.class,
+ ServerPath.class,
+ ServerPathId.class,
+ SoftwareEnvironmentTarget.class,
+ SoftwareProjectSource.class,
+ SslCryptoKey.class,
+ StateChange.class,
+ Task.class,
+ TemplateString.class,
+ TokenChannelAppStream.class,
+ Token.class,
+ UserGroupImpl.class,
+ UserGroupMembers.class,
+ UserImpl.class,
+ UserInfo.class,
+ UserNotification.class,
+ VHMCredentials.class,
+ VirtualHostManagerNodeInfo.class
);
/**
diff --git a/java/code/src/com/redhat/rhn/common/hibernate/EmptyVarcharInterceptor.java b/java/code/src/com/redhat/rhn/common/hibernate/EmptyVarcharInterceptor.java
index bbc7dac81e34..233b3801cd48 100644
--- a/java/code/src/com/redhat/rhn/common/hibernate/EmptyVarcharInterceptor.java
+++ b/java/code/src/com/redhat/rhn/common/hibernate/EmptyVarcharInterceptor.java
@@ -17,7 +17,6 @@
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.hibernate.EmptyInterceptor;
-import org.hibernate.type.StringType;
import org.hibernate.type.Type;
import java.io.Serializable;
@@ -59,8 +58,7 @@ protected static boolean emptyStringToNull(Object entity, Serializable id,
boolean modified = false;
for (int i = 0; i < types.length; i++) {
- // type is string (VARCHAR) and state is empty string
- if ((types[i] instanceof StringType) && "".equals(state[i])) {
+ if ("".equals(state[i])) {
if (LOG.isDebugEnabled()) {
LOG.debug("Object {} is setting empty string {}", entity.getClass().getCanonicalName(),
propertyNames[i]);
diff --git a/java/code/src/com/redhat/rhn/common/messaging/SmtpMail.java b/java/code/src/com/redhat/rhn/common/messaging/SmtpMail.java
index 06f115b2ef7f..7cfb99eb09e0 100644
--- a/java/code/src/com/redhat/rhn/common/messaging/SmtpMail.java
+++ b/java/code/src/com/redhat/rhn/common/messaging/SmtpMail.java
@@ -24,6 +24,7 @@
import org.apache.logging.log4j.Logger;
import java.io.IOException;
+import java.util.Date;
import java.util.Enumeration;
import java.util.LinkedList;
import java.util.List;
@@ -142,6 +143,7 @@ public void setFrom(String from) {
public void send() {
try {
+ message.setSentDate(new Date());
Address[] addrs = message.getRecipients(RecipientType.TO);
if (addrs == null || addrs.length == 0) {
log.warn("Aborting mail message {}: No recipients", message.getSubject());
diff --git a/java/code/src/com/redhat/rhn/common/security/acl/Access.java b/java/code/src/com/redhat/rhn/common/security/acl/Access.java
index 43a7baa17172..9a847782c85e 100644
--- a/java/code/src/com/redhat/rhn/common/security/acl/Access.java
+++ b/java/code/src/com/redhat/rhn/common/security/acl/Access.java
@@ -597,7 +597,7 @@ public boolean aclHasPtfRepositories(Map ctx, String[] params) {
// Evaluate if any of the subscript channel refers to a PTF repository
return server.getChannels()
.stream()
- .map(channel -> channel instanceof ClonedChannel ? channel.getOriginal() : channel)
+ .map(channel -> channel.asCloned().map(ClonedChannel::getOriginal).orElse(channel))
.flatMap(c -> c.getSources().stream())
.map(ContentSource::getSourceUrl)
.anyMatch(url -> url.contains("/PTF/"));
diff --git a/java/code/src/com/redhat/rhn/domain/BaseDomainHelper.java b/java/code/src/com/redhat/rhn/domain/BaseDomainHelper.java
index 76dbefcc1223..9b4615b9fc03 100644
--- a/java/code/src/com/redhat/rhn/domain/BaseDomainHelper.java
+++ b/java/code/src/com/redhat/rhn/domain/BaseDomainHelper.java
@@ -20,6 +20,7 @@
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;
+import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
@@ -31,7 +32,7 @@
* DB table: web_contact
*/
@MappedSuperclass
-public abstract class BaseDomainHelper {
+public abstract class BaseDomainHelper implements Serializable {
private Date created = new Date();
private Date modified;
diff --git a/java/code/src/com/redhat/rhn/domain/action/rhnpackage/test/PackageActionDetailsTest.java b/java/code/src/com/redhat/rhn/domain/action/rhnpackage/test/PackageActionDetailsTest.java
index 043961cfd477..b8edd34f26c7 100644
--- a/java/code/src/com/redhat/rhn/domain/action/rhnpackage/test/PackageActionDetailsTest.java
+++ b/java/code/src/com/redhat/rhn/domain/action/rhnpackage/test/PackageActionDetailsTest.java
@@ -20,6 +20,7 @@
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
+import com.redhat.rhn.common.hibernate.HibernateFactory;
import com.redhat.rhn.domain.action.Action;
import com.redhat.rhn.domain.action.rhnpackage.PackageAction;
import com.redhat.rhn.domain.action.rhnpackage.PackageActionDetails;
@@ -32,7 +33,6 @@
import com.redhat.rhn.domain.server.test.ServerFactoryTest;
import com.redhat.rhn.domain.user.User;
import com.redhat.rhn.testing.RhnBaseTestCase;
-import com.redhat.rhn.testing.TestUtils;
import org.junit.jupiter.api.Test;
@@ -52,9 +52,12 @@ public void testBeanMethods() {
Date now = new Date();
String foo = "foo";
+
Long testid = 100L;
- PackageArch arch = (PackageArch) TestUtils
- .lookupFromCacheById(testid, "PackageArch.findById");
+
+ PackageArch arch = HibernateFactory.getSession().createNativeQuery("""
+ SELECT p.* from rhnPackageArch as p WHERE p.id = :id
+ """, PackageArch.class).setParameter("id", testid).getSingleResult();
PackageEvr evr = PackageEvrFactoryTest.createTestPackageEvr();
PackageName pn = PackageNameTest.createTestPackageName();
@@ -162,8 +165,10 @@ public static PackageActionDetails createTestDetailsWithName(User user, Action p
pad.setParameter("upgrade");
Long testid = 100L;
- pad.setArch((PackageArch) TestUtils
- .lookupFromCacheById(testid, "PackageArch.findById"));
+
+ pad.setArch((HibernateFactory.getSession().createNativeQuery("""
+ SELECT p.* from rhnPackageArch as p WHERE p.id = :id
+ """, PackageArch.class).setParameter("id", testid).getSingleResult()));
pad.setPackageName(PackageNameTest.createTestPackageName());
((PackageAction) parent).addDetail(pad);
@@ -187,8 +192,9 @@ public static PackageActionDetails createTestDetailsWithNvre(User user, Action p
pad.setParameter("upgrade");
Long testid = 100L;
- pad.setArch((PackageArch) TestUtils
- .lookupFromCacheById(testid, "PackageArch.findById"));
+ pad.setArch(HibernateFactory.getSession().createNativeQuery("""
+ SELECT p.* from rhnPackageArch as p WHERE p.id = :id
+ """, PackageArch.class).setParameter("id", testid).getSingleResult());
pad.setPackageName(PackageNameTest.createTestPackageName());
pad.setEvr(PackageEvrFactoryTest.createTestPackageEvr());
diff --git a/java/code/src/com/redhat/rhn/domain/action/test/ActionFactoryTest.java b/java/code/src/com/redhat/rhn/domain/action/test/ActionFactoryTest.java
index 5fa593eb16c0..a07f411134f9 100644
--- a/java/code/src/com/redhat/rhn/domain/action/test/ActionFactoryTest.java
+++ b/java/code/src/com/redhat/rhn/domain/action/test/ActionFactoryTest.java
@@ -533,8 +533,10 @@ else if (type.equals(ActionFactory.TYPE_PACKAGES_AUTOUPDATE) ||
//create packageArch
Long testid = 100L;
- String query = "PackageArch.findById";
- PackageArch arch = (PackageArch) TestUtils.lookupFromCacheById(testid, query);
+ PackageArch arch = HibernateFactory.getSession().createNativeQuery("""
+ SELECT p.* from rhnPackageArch as p WHERE p.id = :id
+ """, PackageArch.class).setParameter("id", testid).getSingleResult();
+
d.setArch(arch);
//create packageName
diff --git a/java/code/src/com/redhat/rhn/domain/action/test/ActionTypeTest.java b/java/code/src/com/redhat/rhn/domain/action/test/ActionTypeTest.java
index aba0cade5c78..afc4579725aa 100644
--- a/java/code/src/com/redhat/rhn/domain/action/test/ActionTypeTest.java
+++ b/java/code/src/com/redhat/rhn/domain/action/test/ActionTypeTest.java
@@ -22,6 +22,7 @@
import com.redhat.rhn.testing.RhnBaseTestCase;
import org.hibernate.Session;
+import org.hibernate.type.StandardBasicTypes;
import org.junit.jupiter.api.Test;
/**
@@ -70,7 +71,7 @@ public void testFindByLabel() throws Exception {
private ActionType lookupByLabel(String label) {
Session session = HibernateFactory.getSession();
return (ActionType) session.getNamedQuery("ActionType.findByLabel")
- .setString("label", label)
+ .setParameter("label", label, StandardBasicTypes.STRING)
//Retrieve from cache if there
.setCacheable(true)
.uniqueResult();
diff --git a/java/code/src/com/redhat/rhn/domain/audit/ScapFactory.java b/java/code/src/com/redhat/rhn/domain/audit/ScapFactory.java
index 172fe46e9098..3852b047fe9b 100644
--- a/java/code/src/com/redhat/rhn/domain/audit/ScapFactory.java
+++ b/java/code/src/com/redhat/rhn/domain/audit/ScapFactory.java
@@ -20,7 +20,7 @@
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
-import org.hibernate.criterion.Restrictions;
+import org.hibernate.type.StandardBasicTypes;
import java.util.List;
import java.util.Map;
@@ -77,8 +77,8 @@ public static void delete(XccdfTestResult tr) {
public static void clearTestResult(long serverId, long actionId) {
List results = getSession()
.getNamedQuery("XccdfTestResult.findByActionId")
- .setLong("serverId", serverId)
- .setLong("actionId", actionId)
+ .setParameter("serverId", serverId, StandardBasicTypes.LONG)
+ .setParameter("actionId", actionId, StandardBasicTypes.LONG)
.list();
results.forEach(ScapFactory::delete);
}
@@ -89,8 +89,7 @@ public static void clearTestResult(long serverId, long actionId) {
* @return the {@link XccdfBenchmark} if any
*/
public static Optional lookupBenchmarkById(long benchmarkId) {
- return Optional.ofNullable(
- (XccdfBenchmark)getSession().get(XccdfBenchmark.class, benchmarkId));
+ return Optional.ofNullable(getSession().get(XccdfBenchmark.class, benchmarkId));
}
/**
@@ -99,7 +98,7 @@ public static Optional lookupBenchmarkById(long benchmarkId) {
* @return the {@link XccdfIdent} if any
*/
public static Optional lookupIdentById(long identId) {
- return Optional.ofNullable((XccdfIdent)getSession().get(XccdfIdent.class, identId));
+ return Optional.ofNullable(getSession().get(XccdfIdent.class, identId));
}
/**
@@ -108,20 +107,22 @@ public static Optional lookupIdentById(long identId) {
* @return the {@link XccdfProfile} if any
*/
public static Optional lookupProfileById(long profileId) {
- return Optional.ofNullable(
- (XccdfProfile)getSession().get(XccdfProfile.class, profileId));
+ return Optional.ofNullable(getSession().get(XccdfProfile.class, profileId));
}
/**
- * Find a {@link XccdfRuleResultType} by id.
- * @param label label id
- * @return the {@link XccdfRuleResultType} if any
+ * Queries an XccdfRuleResultType by its label.
+ *
+ * @param label the label of the XccdfRuleResultType
+ * @return optional of XccdfRuleResultType
*/
public static Optional lookupRuleResultType(String label) {
- return getSession().createCriteria(XccdfRuleResultType.class)
- .add(Restrictions.eq("label", label))
- .list()
- .stream().findFirst();
+ String sql = "SELECT * FROM rhnXccdfRuleResultType WHERE label = :label";
+ XccdfRuleResultType result =
+ getSession().createNativeQuery(sql, XccdfRuleResultType.class)
+ .setParameter("label", label, StandardBasicTypes.STRING)
+ .getResultStream().findFirst().orElse(null);
+ return Optional.ofNullable(result);
}
/**
diff --git a/java/code/src/com/redhat/rhn/domain/channel/Channel.java b/java/code/src/com/redhat/rhn/domain/channel/Channel.java
index 9029e7bc6735..8ae0c0ebff98 100644
--- a/java/code/src/com/redhat/rhn/domain/channel/Channel.java
+++ b/java/code/src/com/redhat/rhn/domain/channel/Channel.java
@@ -38,6 +38,7 @@
import java.util.Date;
import java.util.HashSet;
import java.util.List;
+import java.util.Objects;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Stream;
@@ -986,7 +987,7 @@ public Channel getOriginal() {
* @return stream of channels
*/
public Stream originChain() {
- return Stream.iterate(this, c -> c != null, c -> c.isCloned() ? c.getOriginal() : null);
+ return Stream.iterate(this, Objects::nonNull, c -> c.asCloned().map(ClonedChannel::getOriginal).orElse(null));
}
/**
diff --git a/java/code/src/com/redhat/rhn/domain/channel/ChannelFactory.java b/java/code/src/com/redhat/rhn/domain/channel/ChannelFactory.java
index f98bf2a632cf..cde44589eeeb 100644
--- a/java/code/src/com/redhat/rhn/domain/channel/ChannelFactory.java
+++ b/java/code/src/com/redhat/rhn/domain/channel/ChannelFactory.java
@@ -23,7 +23,6 @@
import com.redhat.rhn.common.db.datasource.WriteMode;
import com.redhat.rhn.common.hibernate.HibernateFactory;
import com.redhat.rhn.domain.common.ChecksumType;
-import com.redhat.rhn.domain.kickstart.KickstartableTree;
import com.redhat.rhn.domain.org.Org;
import com.redhat.rhn.domain.rhnpackage.Package;
import com.redhat.rhn.domain.scc.SCCRepository;
@@ -34,11 +33,9 @@
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
-import org.hibernate.Criteria;
import org.hibernate.Session;
-import org.hibernate.criterion.MatchMode;
-import org.hibernate.criterion.Projections;
-import org.hibernate.criterion.Restrictions;
+import org.hibernate.query.Query;
+import org.hibernate.type.StandardBasicTypes;
import java.util.ArrayList;
import java.util.Arrays;
@@ -51,6 +48,13 @@
import java.util.Optional;
import java.util.Set;
+import javax.persistence.NoResultException;
+import javax.persistence.TypedQuery;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+
/**
* ChannelFactory
*/
@@ -391,9 +395,7 @@ public static List getAccessibleChannelsByOrg(Long orgid) {
* @return list of channel architectures
*/
public static List getChannelArchitectures() {
- Session session = getSession();
- Criteria criteria = session.createCriteria(ChannelArch.class);
- return criteria.list();
+ return getSession().createNativeQuery("SELECT * FROM rhnChannelArch", ChannelArch.class).getResultList();
}
/**
@@ -426,9 +428,10 @@ public static boolean isAccessibleByUser(String channelLabel, Long userId) {
*/
public static ChannelArch findArchByLabel(String label) {
Session session = getSession();
- Criteria criteria = session.createCriteria(ChannelArch.class);
- criteria.add(Restrictions.eq(LABEL, label));
- return (ChannelArch) criteria.uniqueResult();
+ String sql = "SELECT * FROM rhnChannelArch WHERE label = :label";
+ return session.createNativeQuery(sql, ChannelArch.class)
+ .setParameter(LABEL, label, StandardBasicTypes.STRING)
+ .uniqueResult();
}
/**
@@ -451,9 +454,19 @@ public static Channel lookupByLabel(Org org, String label) {
*/
public static Channel lookupByLabel(String label) {
Session session = getSession();
- Criteria c = session.createCriteria(Channel.class);
- c.add(Restrictions.eq(LABEL, label));
- return (Channel) c.uniqueResult();
+ String sql = """
+ SELECT c.*,
+ cl.original_id,
+ CASE
+ WHEN cl.original_id IS NULL THEN 0
+ ELSE 1
+ END AS clazz_
+ FROM rhnChannel c
+ LEFT JOIN rhnChannelCloned cl ON c.id = cl.id
+ WHERE c.label = :label""";
+ return session.createNativeQuery(sql, Channel.class)
+ .setParameter(LABEL, label, StandardBasicTypes.STRING)
+ .uniqueResult();
}
/**
@@ -796,8 +809,11 @@ public static ReleaseChannelMap lookupDefaultReleaseChannelMapForChannel(Channel
* @return ChannelSyncFlag object containing all flag settings for a specfic channel
*/
public static ChannelSyncFlag lookupChannelReposyncFlag(Channel channel) {
- return getSession().createQuery("from ChannelSyncFlag where channel = :channel", ChannelSyncFlag.class)
- .setParameter("channel", channel).uniqueResult();
+ return getSession()
+ .createNativeQuery(
+ "SELECT * FROM rhnChannelSyncFlag WHERE channel_id = :channel", ChannelSyncFlag.class)
+ .setParameter("channel", channel.getId(), StandardBasicTypes.LONG)
+ .getSingleResult();
}
/**
@@ -1074,8 +1090,8 @@ public static Package lookupPackageByFilename(Channel channel,
List pkgs = HibernateFactory.getSession()
.getNamedQuery("Channel.packageByFileName")
- .setString("pathlike", "%/" + fileName)
- .setLong("channel_id", channel.getId())
+ .setParameter("pathlike", "%/" + fileName, StandardBasicTypes.STRING)
+ .setParameter("channel_id", channel.getId(), StandardBasicTypes.LONG)
.list();
if (pkgs.isEmpty()) {
return null;
@@ -1095,12 +1111,11 @@ public static Package lookupPackageByFilenameAndRange(Channel channel,
String fileName, int headerStart, int headerEnd) {
List pkgs = HibernateFactory.getSession()
- .getNamedQuery("Channel.packageByFileNameAndRange")
- .setString("pathlike", "%/" + fileName)
- .setLong("channel_id", channel.getId())
- .setInteger("headerStart", headerStart)
- .setInteger("headerEnd", headerEnd)
- .list();
+ .getNamedQuery("Channel.packageByFileNameAndRange")
+ .setParameter("pathlike", "%/" + fileName, StandardBasicTypes.STRING)
+ .setParameter("channel_id", channel.getId(), StandardBasicTypes.LONG)
+ .setParameter("headerStart", headerStart, StandardBasicTypes.INTEGER)
+ .setParameter("headerEnd", headerEnd, StandardBasicTypes.INTEGER).list();
if (pkgs.isEmpty()) {
return null;
}
@@ -1116,10 +1131,12 @@ public static Package lookupPackageByFilenameAndRange(Channel channel,
* @return true of the channels contains any distros
*/
public static boolean containsDistributions(Channel ch) {
- Criteria criteria = getSession().createCriteria(KickstartableTree.class);
- criteria.setProjection(Projections.rowCount());
- criteria.add(Restrictions.eq("channel", ch));
- return ((Number)criteria.uniqueResult()).intValue() > 0;
+ Session session = getSession();
+ String sql
+ = "SELECT COUNT(*) FROM rhnKickstartableTree WHERE channel_id = :channelId";
+ Number count = (Number) session.createNativeQuery(sql)
+ .setParameter("channelId", ch.getId(), StandardBasicTypes.LONG).getSingleResult();
+ return count.intValue() > 0;
}
/**
@@ -1232,9 +1249,8 @@ public static List listCustomChannelsWithRepositories() {
*/
@SuppressWarnings("unchecked")
public static List listVendorContentSources() {
- Criteria criteria = getSession().createCriteria(ContentSource.class);
- criteria.add(Restrictions.isNull("org"));
- return criteria.list();
+ return getSession().createNativeQuery("SELECT * FROM rhnContentSource WHERE org_id IS NULL",
+ ContentSource.class).getResultList();
}
/**
@@ -1243,23 +1259,42 @@ public static List listVendorContentSources() {
* @return vendor content source if it exists
*/
public static ContentSource findVendorContentSourceByRepo(String repoUrl) {
- Criteria criteria = getSession().createCriteria(ContentSource.class);
- criteria.add(Restrictions.isNull("org"));
+ CriteriaBuilder cb = getSession().getCriteriaBuilder();
+ CriteriaQuery cq = cb.createQuery(ContentSource.class);
+ Root root = cq.from(ContentSource.class);
+
+ // Create predicates for the query
+ Predicate isOrgNull = cb.isNull(root.get("org"));
+ Predicate sourceUrlPredicate;
+
if (repoUrl.contains("mirrorlist.centos.org") || repoUrl.contains("mirrors.rockylinux.org")) {
- criteria.add(Restrictions.eq("sourceUrl", repoUrl));
+ sourceUrlPredicate = cb.equal(root.get("sourceUrl"), repoUrl);
}
else {
- String [] parts = repoUrl.split("\\?");
+ String[] parts = repoUrl.split("\\?");
String repoUrlPrefix = parts[0];
if (parts.length > 1) {
- criteria.add(Restrictions.like("sourceUrl", repoUrlPrefix + '?',
- MatchMode.START));
+ sourceUrlPredicate = cb.like(root.get("sourceUrl"), repoUrlPrefix + '%');
}
else {
- criteria.add(Restrictions.eq("sourceUrl", repoUrlPrefix));
+ sourceUrlPredicate = cb.equal(root.get("sourceUrl"), repoUrlPrefix);
}
}
- return (ContentSource) criteria.uniqueResult();
+
+ // Combine predicates
+ cq.where(cb.and(isOrgNull, sourceUrlPredicate));
+
+ // Create and execute the query
+ TypedQuery query = getSession().createQuery(cq);
+ ContentSource contentSource;
+ try {
+ contentSource = query.getSingleResult();
+ }
+ catch (NoResultException e) {
+ contentSource = null;
+ }
+
+ return contentSource;
}
/**
@@ -1286,10 +1321,18 @@ public static List findContentSourceLikeUrl(String urlPart) {
* @return channel product
*/
public static ChannelProduct findChannelProduct(String product, String version) {
- Criteria criteria = getSession().createCriteria(ChannelProduct.class);
- criteria.add(Restrictions.eq("product", product));
- criteria.add(Restrictions.eq("version", version));
- return (ChannelProduct) criteria.uniqueResult();
+ Session session = getSession();
+ String sql
+ = "SELECT * FROM rhnChannelProduct WHERE product = :product AND version = :version";
+ Query query = session.createNativeQuery(sql, ChannelProduct.class);
+ query.setParameter("product", product, StandardBasicTypes.STRING);
+ query.setParameter("version", version, StandardBasicTypes.STRING);
+ try {
+ return query.getSingleResult();
+ }
+ catch (NoResultException e) {
+ return null;
+ }
}
/**
diff --git a/java/code/src/com/redhat/rhn/domain/channel/ChannelFamilyFactory.java b/java/code/src/com/redhat/rhn/domain/channel/ChannelFamilyFactory.java
index a7a1bdf7fbca..3aec3bf0b68e 100644
--- a/java/code/src/com/redhat/rhn/domain/channel/ChannelFamilyFactory.java
+++ b/java/code/src/com/redhat/rhn/domain/channel/ChannelFamilyFactory.java
@@ -24,9 +24,7 @@
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
-import org.hibernate.Criteria;
-import org.hibernate.Session;
-import org.hibernate.criterion.Restrictions;
+import org.hibernate.query.Query;
import java.util.ArrayList;
import java.util.HashMap;
@@ -34,6 +32,9 @@
import java.util.List;
import java.util.Map;
+import javax.persistence.NoResultException;
+import javax.persistence.TypedQuery;
+
/**
* ChannelFamilyFactory
*/
@@ -78,12 +79,24 @@ public static ChannelFamily lookupById(Long id) {
* @return the ChannelFamily found
*/
public static ChannelFamily lookupByLabel(String label, Org org) {
- Session session = getSession();
- Criteria c = session.createCriteria(ChannelFamily.class);
- c.add(Restrictions.eq("label", label));
- c.add(Restrictions.or(Restrictions.eq("org", org),
- Restrictions.isNull("org")));
- return (ChannelFamily) c.uniqueResult();
+ String sql = "SELECT * FROM rhnChannelFamily WHERE label = :label AND (org_id = :org OR org_id IS NULL)";
+ Query query = getSession().createNativeQuery(sql, ChannelFamily.class);
+ query.setParameter("label", label);
+
+ // Handle org being null
+ if (org != null) {
+ query.setParameter("org", org.getId());
+ }
+ else {
+ query.setParameter("org", -1);
+ }
+
+ try {
+ return query.getSingleResult();
+ }
+ catch (NoResultException e) {
+ return null;
+ }
}
/**
@@ -211,17 +224,23 @@ public static void save(PublicChannelFamily pcf) {
* Lookup the List of ChannelFamily objects that are labled starting
* with the passed in label param
* @param label to query against
- * @param orgIn owning the Channel. Pass in NULL if you want a NULL org channel
+ * @param org owning the Channel. Pass in NULL if you want a NULL org channel
* @return List of Channel objects
*/
@SuppressWarnings("unchecked")
- public static List lookupByLabelLike(String label, Org orgIn) {
- Session session = getSession();
- Criteria c = session.createCriteria(ChannelFamily.class);
- c.add(Restrictions.like("label", label + "%"));
- c.add(Restrictions.or(Restrictions.eq("org", orgIn),
- Restrictions.isNull("org")));
- return c.list();
+ public static List lookupByLabelLike(String label, Org org) {
+ String sql = "SELECT * FROM rhnChannelFamily WHERE label LIKE :label AND (org_id = :org OR org_id IS NULL)";
+ Query query = getSession().createNativeQuery(sql, ChannelFamily.class);
+ query.setParameter("label", label);
+
+ // Handle org being null
+ if (org != null) {
+ query.setParameter("org", org.getId());
+ }
+ else {
+ query.setParameter("org", -1);
+ }
+ return query.getResultList();
}
/**
@@ -243,8 +262,9 @@ public static String getNameByLabel(String label) {
*/
@SuppressWarnings("unchecked")
public static List getAllChannelFamilies() {
- Session session = getSession();
- Criteria c = session.createCriteria(ChannelFamily.class);
- return c.list();
+ String sql = "SELECT * FROM rhnChannelFamily";
+ TypedQuery query =
+ getSession().createNativeQuery(sql, ChannelFamily.class);
+ return query.getResultList();
}
}
diff --git a/java/code/src/com/redhat/rhn/domain/channel/ChannelProduct.java b/java/code/src/com/redhat/rhn/domain/channel/ChannelProduct.java
index 0f5efd49331f..e38de9c95547 100644
--- a/java/code/src/com/redhat/rhn/domain/channel/ChannelProduct.java
+++ b/java/code/src/com/redhat/rhn/domain/channel/ChannelProduct.java
@@ -14,19 +14,18 @@
*/
package com.redhat.rhn.domain.channel;
-import java.util.Date;
+import com.redhat.rhn.domain.BaseDomainHelper;
/**
* ChannelProduct - Class representation of the table rhnChannelProduct.
*/
-public class ChannelProduct {
+public class ChannelProduct extends BaseDomainHelper {
private Long id;
private String product;
private String version;
private String betaMarker;
- private Date created;
- private Date modified;
+
/**
* Getter for id
* @return Long to get
@@ -112,37 +111,4 @@ public void setBeta(boolean isBeta) {
this.setBetaMarker("N");
}
}
-
- /**
- * Getter for created
- * @return Date to get
- */
- public Date getCreated() {
- return this.created;
- }
-
- /**
- * Setter for created
- * @param createdIn to set
- */
- public void setCreated(Date createdIn) {
- this.created = createdIn;
- }
-
- /**
- * Getter for modified
- * @return Date to get
- */
- public Date getModified() {
- return this.modified;
- }
-
- /**
- * Setter for modified
- * @param modifiedIn to set
- */
- public void setModified(Date modifiedIn) {
- this.modified = modifiedIn;
- }
-
}
diff --git a/java/code/src/com/redhat/rhn/domain/channel/ProductName.java b/java/code/src/com/redhat/rhn/domain/channel/ProductName.java
index f2c85eccd016..98dbd6a633dc 100644
--- a/java/code/src/com/redhat/rhn/domain/channel/ProductName.java
+++ b/java/code/src/com/redhat/rhn/domain/channel/ProductName.java
@@ -14,22 +14,20 @@
*/
package com.redhat.rhn.domain.channel;
+import com.redhat.rhn.domain.BaseDomainHelper;
+
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.apache.commons.lang3.builder.ToStringBuilder;
-import java.util.Date;
-
/**
*
* ProductName
*/
-public class ProductName {
+public class ProductName extends BaseDomainHelper {
private Long id;
private String label;
private String name;
- private Date created;
- private Date modified;
/**
* @return the id
@@ -74,33 +72,6 @@ public void setName(String nameIn) {
this.name = nameIn;
}
- /**
- * @return the created
- */
- public Date getCreated() {
- return created;
- }
-
- /**
- * @param date the created to set
- */
- public void setCreated(Date date) {
- this.created = date;
- }
-
- /**
- * @return the modified
- */
- public Date getModified() {
- return modified;
- }
-
- /**
- * @param date the modified to set
- */
- public void setModified(Date date) {
- this.modified = date;
- }
/**
*
* {@inheritDoc}
diff --git a/java/code/src/com/redhat/rhn/domain/common/CommonFactory.java b/java/code/src/com/redhat/rhn/domain/common/CommonFactory.java
index bb26abb21209..0d62fdef04a9 100644
--- a/java/code/src/com/redhat/rhn/domain/common/CommonFactory.java
+++ b/java/code/src/com/redhat/rhn/domain/common/CommonFactory.java
@@ -22,6 +22,7 @@
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.hibernate.Session;
+import org.hibernate.type.StandardBasicTypes;
import java.util.Calendar;
import java.util.Date;
@@ -87,9 +88,12 @@ public static FileList lookupFileList(Long idIn, Org org) {
Session session = null;
//look for Kickstart data by id
session = HibernateFactory.getSession();
- return (FileList) session.getNamedQuery("FileList.findByIdAndOrg")
- .setLong("id", idIn)
- .setLong("org_id", org.getId())
+ return session.createNativeQuery("""
+ SELECT * from rhnFileList
+ WHERE id = :id
+ and org_id = :org_id """, FileList.class)
+ .setParameter("id", idIn, StandardBasicTypes.LONG)
+ .setParameter("org_id", org.getId(), StandardBasicTypes.LONG)
.uniqueResult();
}
@@ -103,8 +107,10 @@ public static FileList lookupFileList(String labelIn, Org org) {
Session session = null;
//look for Kickstart data by label
session = HibernateFactory.getSession();
- return (FileList) session.getNamedQuery("FileList.findByLabelAndOrg").setString("label", labelIn)
- .setLong("org_id", org.getId()).uniqueResult();
+ return (FileList) session.getNamedQuery("FileList.findByLabelAndOrg")
+ .setParameter("label", labelIn, StandardBasicTypes.STRING)
+ .setParameter("org_id", org.getId(), StandardBasicTypes.LONG)
+ .uniqueResult();
}
/**
@@ -150,7 +156,7 @@ public static void saveTinyUrl(TinyUrl urlIn) {
public static TinyUrl lookupTinyUrl(String tokenIn) {
Session session = HibernateFactory.getSession();
return (TinyUrl) session.getNamedQuery("TinyUrl.findByToken")
- .setString("token", tokenIn)
- .uniqueResult();
+ .setParameter("token", tokenIn, StandardBasicTypes.STRING)
+ .uniqueResult();
}
}
diff --git a/java/code/src/com/redhat/rhn/domain/common/ExceptionMessage.java b/java/code/src/com/redhat/rhn/domain/common/ExceptionMessage.java
index 11fdf54dcfbb..42cbf1b45bd1 100644
--- a/java/code/src/com/redhat/rhn/domain/common/ExceptionMessage.java
+++ b/java/code/src/com/redhat/rhn/domain/common/ExceptionMessage.java
@@ -18,10 +18,10 @@
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
-import org.hibernate.Criteria;
-import org.hibernate.Session;
-import org.hibernate.criterion.Restrictions;
+import org.hibernate.query.Query;
+import org.hibernate.type.StandardBasicTypes;
+import javax.persistence.NoResultException;
/**
* RhnException
@@ -43,12 +43,18 @@ protected ExceptionMessage() {
* @return the associated exception object / null if not found otherwise
*/
public static ExceptionMessage lookup(long exceptionId) {
- Session session = HibernateFactory.getSession();
- Criteria criteria = session.createCriteria(ExceptionMessage.class);
- criteria.add(Restrictions.or(
- Restrictions.eq("id", -1 * exceptionId),
- Restrictions.eq("id", exceptionId)));
- return (ExceptionMessage) criteria.uniqueResult();
+ String sql = "SELECT * FROM exception_message WHERE id = :id OR id = :negId";
+
+ Query query = HibernateFactory.getSession()
+ .createNativeQuery(sql, ExceptionMessage.class);
+ query.setParameter("id", exceptionId, StandardBasicTypes.LONG);
+ query.setParameter("negId", -1 * exceptionId, StandardBasicTypes.LONG);
+ try {
+ return query.getSingleResult();
+ }
+ catch (NoResultException e) {
+ return null;
+ }
}
/**
diff --git a/java/code/src/com/redhat/rhn/domain/common/FileList.hbm.xml b/java/code/src/com/redhat/rhn/domain/common/FileList.hbm.xml
index bcf59d0ecd5f..8f20591bb346 100644
--- a/java/code/src/com/redhat/rhn/domain/common/FileList.hbm.xml
+++ b/java/code/src/com/redhat/rhn/domain/common/FileList.hbm.xml
@@ -34,10 +34,6 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
-
-
-
diff --git a/java/code/src/com/redhat/rhn/domain/config/ConfigChannelListProcessor.java b/java/code/src/com/redhat/rhn/domain/config/ConfigChannelListProcessor.java
index 3ccf6cc04221..fb978075f012 100644
--- a/java/code/src/com/redhat/rhn/domain/config/ConfigChannelListProcessor.java
+++ b/java/code/src/com/redhat/rhn/domain/config/ConfigChannelListProcessor.java
@@ -20,13 +20,14 @@
import com.redhat.rhn.domain.user.User;
import com.redhat.rhn.manager.configuration.ConfigurationManager;
+import java.io.Serializable;
import java.util.List;
/**
*
* ConfigChannelListProcessor
*/
-public class ConfigChannelListProcessor {
+public class ConfigChannelListProcessor implements Serializable {
private void check(ConfigChannel cc) {
if (cc == null) {
diff --git a/java/code/src/com/redhat/rhn/domain/config/ConfigurationFactory.java b/java/code/src/com/redhat/rhn/domain/config/ConfigurationFactory.java
index 972987cee09a..81200f2412fd 100644
--- a/java/code/src/com/redhat/rhn/domain/config/ConfigurationFactory.java
+++ b/java/code/src/com/redhat/rhn/domain/config/ConfigurationFactory.java
@@ -34,8 +34,8 @@
import org.apache.logging.log4j.Logger;
import org.hibernate.ObjectNotFoundException;
import org.hibernate.Session;
-import org.hibernate.criterion.Restrictions;
import org.hibernate.query.Query;
+import org.hibernate.type.StandardBasicTypes;
import java.io.IOException;
import java.io.InputStream;
@@ -46,10 +46,6 @@
import java.util.Map;
import java.util.Optional;
-import javax.persistence.criteria.CriteriaBuilder;
-import javax.persistence.criteria.CriteriaQuery;
-import javax.persistence.criteria.Root;
-
/**
* ConfigurationFactory. For use when dealing with ConfigChannel, ConfigChannelType,
* ConfigFile, ConfigRevision, ConfigFileState, ConfigContent, and ConfigInfo.
@@ -355,11 +351,15 @@ public static ConfigRevision commit(ConfigRevision revision) {
* @return the list of global config channels
*/
public static List listGlobalChannels() {
- CriteriaBuilder builder = getSession().getCriteriaBuilder();
- CriteriaQuery criteria = builder.createQuery(ConfigChannel.class);
- Root root = criteria.from(ConfigChannel.class);
- criteria.where(root.get("configChannelType").in(ConfigChannelType.normal(), ConfigChannelType.state()));
- return getSession().createQuery(criteria).getResultList();
+ return getSession().createNativeQuery("""
+ SELECT * from rhnConfigChannel
+ WHERE
+ confchan_type_id = :confchan_type_id_normal
+ OR confchan_type_id = :confchan_type_id_state
+ """, ConfigChannel.class)
+ .setParameter("confchan_type_id_normal", ConfigChannelType.normal().getId(), StandardBasicTypes.LONG)
+ .setParameter("confchan_type_id_state", ConfigChannelType.state().getId(), StandardBasicTypes.LONG)
+ .getResultList();
}
/**
@@ -383,12 +383,16 @@ public static ConfigChannel lookupConfigChannelById(Long id) {
public static ConfigChannel lookupConfigChannelByLabel(String label,
Org org,
ConfigChannelType cct) {
- Session session = HibernateFactory.getSession();
- return (ConfigChannel) session.createCriteria(ConfigChannel.class).
- add(Restrictions.eq("org", org)).
- add(Restrictions.eq("label", label)).
- add(Restrictions.eq("configChannelType", cct)).
- uniqueResult();
+ return getSession().createNativeQuery("""
+ SELECT * from rhnConfigChannel
+ WHERE label = :label
+ AND org_id = :org_id
+ AND confchan_type_id = :confchan_type_id
+ """, ConfigChannel.class)
+ .setParameter("label", label, StandardBasicTypes.STRING)
+ .setParameter("org_id", org.getId(), StandardBasicTypes.LONG)
+ .setParameter("confchan_type_id", cct.getId(), StandardBasicTypes.LONG)
+ .uniqueResult();
}
/**
@@ -400,14 +404,19 @@ public static ConfigChannel lookupConfigChannelByLabel(String label,
*/
public static Optional lookupGlobalConfigChannelByLabel(String label, Org org) {
- CriteriaBuilder builder = getSession().getCriteriaBuilder();
- CriteriaQuery criteria = builder.createQuery(ConfigChannel.class);
- Root root = criteria.from(ConfigChannel.class);
- criteria.where(builder.and(
- builder.equal(root.get("label"), label)),
- builder.equal(root.get("org"), org),
- root.get("configChannelType").in(ConfigChannelType.normal(), ConfigChannelType.state()));
- return getSession().createQuery(criteria).uniqueResultOptional();
+ return getSession().createNativeQuery("""
+ SELECT * from rhnConfigChannel
+ WHERE label = :label
+ AND org_id = :org_id
+ AND (
+ confchan_type_id = :confchan_type_id_normal
+ OR confchan_type_id = :confchan_type_id_state)
+ """, ConfigChannel.class)
+ .setParameter("label", label, StandardBasicTypes.STRING)
+ .setParameter("org_id", org.getId(), StandardBasicTypes.LONG)
+ .setParameter("confchan_type_id_normal", ConfigChannelType.normal().getId(), StandardBasicTypes.LONG)
+ .setParameter("confchan_type_id_state", ConfigChannelType.state().getId(), StandardBasicTypes.LONG)
+ .uniqueResultOptional();
}
/**
@@ -431,10 +440,9 @@ public static ConfigFile lookupConfigFileByChannelAndName(Long channel, Long nam
Session session = HibernateFactory.getSession();
Query query =
session.getNamedQuery("ConfigFile.findByChannelAndName")
- .setLong("channel_id", channel)
- .setLong("name_id", name)
- .setLong("state_id", ConfigFileState.normal().
- getId());
+ .setParameter("channel_id", channel, StandardBasicTypes.LONG)
+ .setParameter("name_id", name, StandardBasicTypes.LONG)
+ .setParameter("state_id", ConfigFileState.normal().getId(), StandardBasicTypes.LONG);
try {
return query.uniqueResult();
}
@@ -464,7 +472,7 @@ public static ConfigRevision lookupConfigRevisionById(Long id) {
public static ConfigRevision lookupConfigRevisionByRevId(ConfigFile cf, Long revId) {
Session session = HibernateFactory.getSession();
Query q = session.getNamedQuery("ConfigRevision.findByRevisionAndConfigFile");
- q.setLong("rev", revId);
+ q.setParameter("rev", revId, StandardBasicTypes.LONG);
q.setParameter("cf", cf);
return q.uniqueResult();
}
@@ -515,7 +523,7 @@ static ConfigChannelType lookupConfigChannelTypeByLabel(String label) {
Session session = HibernateFactory.getSession();
return (ConfigChannelType)
session.getNamedQuery("ConfigChannelType.findByLabel")
- .setString("label", label)
+ .setParameter("label", label, StandardBasicTypes.STRING)
//Retrieve from cache if there
.setCacheable(true)
.uniqueResult();
@@ -532,7 +540,7 @@ static ConfigChannelType lookupConfigChannelTypeByLabel(String label) {
static ConfigFileState lookupConfigFileStateByLabel(String label) {
Session session = HibernateFactory.getSession();
return (ConfigFileState)session.getNamedQuery("ConfigFileState.findByLabel")
- .setString("label", label)
+ .setParameter("label", label, StandardBasicTypes.STRING)
//Retrieve from cache if there
.setCacheable(true)
.uniqueResult();
@@ -546,7 +554,7 @@ static ConfigFileState lookupConfigFileStateByLabel(String label) {
static ConfigFileType lookupConfigFileTypeByLabel(String label) {
Session session = HibernateFactory.getSession();
return (ConfigFileType)session.getNamedQuery("ConfigFileType.findByLabel")
- .setString("label", label)
+ .setParameter("label", label, StandardBasicTypes.STRING)
//Retrieve from cache if there
.setCacheable(true)
.uniqueResult();
diff --git a/java/code/src/com/redhat/rhn/domain/credentials/test/CredentialsTest.java b/java/code/src/com/redhat/rhn/domain/credentials/test/CredentialsTest.java
index ad456b1eac28..efcbe4317846 100644
--- a/java/code/src/com/redhat/rhn/domain/credentials/test/CredentialsTest.java
+++ b/java/code/src/com/redhat/rhn/domain/credentials/test/CredentialsTest.java
@@ -50,7 +50,7 @@ public void testSCCCredentials() throws Exception {
assertEquals("secret", creds.getPassword());
Optional r = HibernateFactory.getSession()
- .createSQLQuery("select password from suseCredentials where username = 'admin';")
+ .createNativeQuery("select password from suseCredentials where username = 'admin';")
.uniqueResultOptional();
// this prove that we really store encoded content in DB
assertEquals("c2VjcmV0", r.orElseThrow().toString());
diff --git a/java/code/src/com/redhat/rhn/domain/errata/ErrataFactory.java b/java/code/src/com/redhat/rhn/domain/errata/ErrataFactory.java
index 1f8d1a196735..b0f12c776aa5 100644
--- a/java/code/src/com/redhat/rhn/domain/errata/ErrataFactory.java
+++ b/java/code/src/com/redhat/rhn/domain/errata/ErrataFactory.java
@@ -50,6 +50,7 @@
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.query.Query;
+import org.hibernate.type.StandardBasicTypes;
import java.util.ArrayList;
import java.util.Collection;
@@ -396,7 +397,8 @@ public static ErrataFileType lookupErrataFileType(String label) {
ErrataFileType retval;
try {
retval = (ErrataFileType) getSession().getNamedQuery("ErrataFileType.findByLabel")
- .setString("label", label).setCacheable(true).uniqueResult();
+ .setParameter("label", label, StandardBasicTypes.STRING)
+ .setCacheable(true).uniqueResult();
}
catch (HibernateException e) {
throw new HibernateRuntimeException(e.getMessage(), e);
@@ -413,9 +415,9 @@ public static ErrataFileType lookupErrataFileType(String label) {
public static List lookupErrataFilesByErrataAndFileType(Long errataId, String fileType) {
List retval;
try {
- Query q = getSession().getNamedQuery("ErrataFile.listByErrataAndFileType");
- q.setLong("errata_id", errataId);
- q.setString("file_type", fileType.toUpperCase());
+ Query q = getSession().getNamedQuery("ErrataFile.listByErrataAndFileType")
+ .setParameter("errata_id", errataId, StandardBasicTypes.LONG)
+ .setParameter("file_type", fileType.toUpperCase(), StandardBasicTypes.STRING);
retval = q.list();
}
catch (HibernateException e) {
@@ -446,7 +448,7 @@ public static List lookupErratasByAdvisoryType(String advisoryType) {
List retval;
try {
retval = getSession().getNamedQuery("Errata.findByAdvisoryType")
- .setString("type", advisoryType)
+ .setParameter("type", advisoryType, StandardBasicTypes.STRING)
//Retrieve from cache if there
.setCacheable(true).list();
}
@@ -466,7 +468,8 @@ public static Errata lookupErrataById(Long id) {
Errata retval;
try {
retval = (Errata) getSession().getNamedQuery("Errata.findById")
- .setLong("id", id).uniqueResult();
+ .setParameter("id", id, StandardBasicTypes.LONG)
+ .uniqueResult();
}
catch (HibernateException he) {
log.error("Error loading ActionArchTypes from DB", he);
@@ -485,7 +488,7 @@ public static Errata lookupErrataById(Long id) {
public static List lookupVendorAndUserErrataByAdvisoryAndOrg(String advisory, Org org) {
Session session = HibernateFactory.getSession();
return session.getNamedQuery("Errata.findVendorAnUserErrataByAdvisoryNameAndOrg")
- .setParameter("advisory", advisory)
+ .setParameter("advisory", advisory, StandardBasicTypes.STRING)
.setParameter("org", org)
.getResultList();
}
@@ -499,7 +502,7 @@ public static List lookupVendorAndUserErrataByAdvisoryAndOrg(String advi
public static Errata lookupByAdvisoryAndOrg(String advisory, Org org) {
return (Errata) HibernateFactory.getSession()
.getNamedQuery("Errata.findByAdvisoryNameAndOrg")
- .setParameter("advisory", advisory)
+ .setParameter("advisory", advisory, StandardBasicTypes.STRING)
.setParameter("org", org)
.uniqueResult();
}
@@ -515,7 +518,7 @@ public static List lookupByAdvisoryId(String advisoryId, Org org) {
List retval;
try {
retval = getSession().getNamedQuery("Errata.findByAdvisory")
- .setParameter("advisory", advisoryId)
+ .setParameter("advisory", advisoryId, StandardBasicTypes.STRING)
.setParameter("org", org)
.getResultList();
}
@@ -712,8 +715,8 @@ public static List lookupByChannelBetweenDates(Org org, Channel channel,
getNamedQuery("Errata.lookupByChannelBetweenDates")
.setParameter("org", org)
.setParameter("channel", channel)
- .setParameter("start_date", startDate)
- .setParameter("end_date", endDate)
+ .setParameter("start_date", startDate, StandardBasicTypes.STRING)
+ .setParameter("end_date", endDate, StandardBasicTypes.STRING)
.list();
}
@@ -731,8 +734,9 @@ public static List lookupByChannelBetweenDates(Org org, Channel channel,
public static Optional lookupErrataFile(Long errataId, String filename) {
Session session = HibernateFactory.getSession();
return session.getNamedQuery("ErrataFile.lookupByErrataAndPackage")
- .setParameter("errata_id", errataId)
- .setParameter("filename", filename).uniqueResultOptional();
+ .setParameter("errata_id", errataId, StandardBasicTypes.LONG)
+ .setParameter("filename", filename, StandardBasicTypes.STRING)
+ .uniqueResultOptional();
}
/**
diff --git a/java/code/src/com/redhat/rhn/domain/image/ImageInfo.java b/java/code/src/com/redhat/rhn/domain/image/ImageInfo.java
index fad24873f459..c2fc0823533d 100644
--- a/java/code/src/com/redhat/rhn/domain/image/ImageInfo.java
+++ b/java/code/src/com/redhat/rhn/domain/image/ImageInfo.java
@@ -88,7 +88,7 @@ public class ImageInfo extends BaseDomainHelper {
* @return the id
*/
@Id
- @Column(name = "id")
+ @Column(name = "id", insertable = false, updatable = false)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "imginfo_seq")
@SequenceGenerator(name = "imginfo_seq", sequenceName = "suse_imginfo_imgid_seq",
allocationSize = 1)
diff --git a/java/code/src/com/redhat/rhn/domain/image/ImageInfoCustomDataValue.java b/java/code/src/com/redhat/rhn/domain/image/ImageInfoCustomDataValue.java
index 26e8ad4ab815..306eb0b1042e 100644
--- a/java/code/src/com/redhat/rhn/domain/image/ImageInfoCustomDataValue.java
+++ b/java/code/src/com/redhat/rhn/domain/image/ImageInfoCustomDataValue.java
@@ -15,6 +15,7 @@
package com.redhat.rhn.domain.image;
import com.redhat.rhn.common.util.StringUtil;
+import com.redhat.rhn.domain.BaseDomainHelper;
import com.redhat.rhn.domain.org.CustomDataKey;
import com.redhat.rhn.domain.user.User;
import com.redhat.rhn.domain.user.legacy.UserImpl;
@@ -22,8 +23,6 @@
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
-import java.util.Date;
-
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
@@ -40,7 +39,7 @@
*/
@Entity
@Table(name = "suseImageCustomDataValue")
-public class ImageInfoCustomDataValue {
+public class ImageInfoCustomDataValue extends BaseDomainHelper {
private Long id;
private ImageInfo imageInfo;
@@ -48,8 +47,6 @@ public class ImageInfoCustomDataValue {
private String value;
private User creator;
private User lastModifier;
- private Date created;
- private Date modified;
/**
* Instantiates a new image info custom data value.
@@ -121,20 +118,6 @@ public User getCreator() {
public User getLastModifier() {
return lastModifier;
}
- /**
- * @return Returns the created.
- */
- @Column(insertable = false, updatable = false)
- public Date getCreated() {
- return created;
- }
- /**
- * @return Returns the modified.
- */
- @Column(insertable = false, updatable = false)
- public Date getModified() {
- return modified;
- }
/**
* @param idIn the id to set
@@ -172,18 +155,6 @@ public void setCreator(User creatorIn) {
public void setLastModifier(User lastModifierIn) {
this.lastModifier = lastModifierIn;
}
- /**
- * @param createdIn The created to set.
- */
- public void setCreated(Date createdIn) {
- this.created = createdIn;
- }
- /**
- * @param modifiedIn The modified to set.
- */
- public void setModified(Date modifiedIn) {
- this.modified = modifiedIn;
- }
/**
* {@inheritDoc}
diff --git a/java/code/src/com/redhat/rhn/domain/image/ImagePackage.java b/java/code/src/com/redhat/rhn/domain/image/ImagePackage.java
index 4d610968b5a1..752a8499a317 100644
--- a/java/code/src/com/redhat/rhn/domain/image/ImagePackage.java
+++ b/java/code/src/com/redhat/rhn/domain/image/ImagePackage.java
@@ -23,6 +23,7 @@
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
+import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
@@ -39,7 +40,7 @@
@Entity
@IdClass(ImagePackageKey.class)
@Table(name = "suseImageInfoPackage")
-public class ImagePackage implements Comparable {
+public class ImagePackage implements Comparable, Serializable {
private PackageEvr evr;
private PackageName name;
diff --git a/java/code/src/com/redhat/rhn/domain/image/ProfileCustomDataValue.java b/java/code/src/com/redhat/rhn/domain/image/ProfileCustomDataValue.java
index 47eeb5709113..6b0f089ef6bc 100644
--- a/java/code/src/com/redhat/rhn/domain/image/ProfileCustomDataValue.java
+++ b/java/code/src/com/redhat/rhn/domain/image/ProfileCustomDataValue.java
@@ -15,6 +15,7 @@
package com.redhat.rhn.domain.image;
import com.redhat.rhn.common.util.StringUtil;
+import com.redhat.rhn.domain.BaseDomainHelper;
import com.redhat.rhn.domain.org.CustomDataKey;
import com.redhat.rhn.domain.user.User;
import com.redhat.rhn.domain.user.legacy.UserImpl;
@@ -22,8 +23,6 @@
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
-import java.util.Date;
-
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
@@ -41,7 +40,7 @@
@Entity
@Table(name = "suseProfileCustomDataValue")
-public class ProfileCustomDataValue {
+public class ProfileCustomDataValue extends BaseDomainHelper {
private Long id;
private ImageProfile profile;
@@ -49,8 +48,6 @@ public class ProfileCustomDataValue {
private String value;
private User creator;
private User lastModifier;
- private Date created;
- private Date modified;
/**
* @return Returns the Id
@@ -101,20 +98,6 @@ public User getCreator() {
public User getLastModifier() {
return lastModifier;
}
- /**
- * @return Returns the created.
- */
- @Column(insertable = false, updatable = false)
- public Date getCreated() {
- return created;
- }
- /**
- * @return Returns the modified.
- */
- @Column(insertable = false, updatable = false)
- public Date getModified() {
- return modified;
- }
/**
* @param idIn the id to set
@@ -152,18 +135,6 @@ public void setCreator(User creatorIn) {
public void setLastModifier(User lastModifierIn) {
this.lastModifier = lastModifierIn;
}
- /**
- * @param createdIn The created to set.
- */
- public void setCreated(Date createdIn) {
- this.created = createdIn;
- }
- /**
- * @param modifiedIn The modified to set.
- */
- public void setModified(Date modifiedIn) {
- this.modified = modifiedIn;
- }
/**
* {@inheritDoc}
diff --git a/java/code/src/com/redhat/rhn/domain/kickstart/KickstartFactory.java b/java/code/src/com/redhat/rhn/domain/kickstart/KickstartFactory.java
index d5a9c4b0007a..58f3d2867fce 100644
--- a/java/code/src/com/redhat/rhn/domain/kickstart/KickstartFactory.java
+++ b/java/code/src/com/redhat/rhn/domain/kickstart/KickstartFactory.java
@@ -37,12 +37,9 @@
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.cobbler.Profile;
-import org.hibernate.Criteria;
import org.hibernate.Session;
-import org.hibernate.criterion.CriteriaSpecification;
import org.hibernate.query.Query;
-import org.hibernate.type.LongType;
-import org.hibernate.type.StringType;
+import org.hibernate.type.StandardBasicTypes;
import java.io.File;
import java.util.ArrayList;
@@ -192,8 +189,8 @@ else if (minor.contains("u")) {
public static KickstartData lookupKickstartDataByIdAndOrg(Org orgIn, Long ksid) {
return (KickstartData) HibernateFactory.getSession()
.getNamedQuery("KickstartData.findByIdAndOrg")
- .setParameter("id", ksid, LongType.INSTANCE)
- .setParameter(ORG_ID, orgIn.getId(), LongType.INSTANCE)
+ .setParameter("id", ksid, StandardBasicTypes.LONG)
+ .setParameter(ORG_ID, orgIn.getId(), StandardBasicTypes.LONG)
.uniqueResult();
}
@@ -207,7 +204,7 @@ public static KickstartData lookupKickstartDataByCobblerIdAndOrg(Org orgIn,
return (KickstartData) HibernateFactory.getSession()
.getNamedQuery("KickstartData.findByCobblerIdAndOrg")
.setParameter("id", cobblerId)
- .setParameter(ORG_ID, orgIn.getId(), LongType.INSTANCE)
+ .setParameter(ORG_ID, orgIn.getId(), StandardBasicTypes.LONG)
.uniqueResult();
}
@@ -225,7 +222,7 @@ public static KickstartData lookupKickstartDataByLabelAndOrgId(
return (KickstartData) HibernateFactory.getSession().
getNamedQuery("KickstartData.findByLabelAndOrg")
.setParameter(LABEL, label)
- .setParameter(ORG_ID, orgId, LongType.INSTANCE)
+ .setParameter(ORG_ID, orgId, StandardBasicTypes.LONG)
.uniqueResult();
}
@@ -244,7 +241,7 @@ public static KickstartData lookupKickstartDataByCILabelAndOrgId(
return (KickstartData) HibernateFactory.getSession().
getNamedQuery("KickstartData.findByCILabelAndOrg")
.setParameter(LABEL, label)
- .setParameter(ORG_ID, orgId, LongType.INSTANCE)
+ .setParameter(ORG_ID, orgId, StandardBasicTypes.LONG)
.uniqueResult();
}
@@ -484,12 +481,12 @@ public static CryptoKey lookupCryptoKey(String description, Org org) {
Query query = null;
if (org != null) {
query = session.getNamedQuery("CryptoKey.findByDescAndOrg")
- .setParameter("description", description)
- .setParameter(ORG_ID, org.getId(), LongType.INSTANCE);
+ .setParameter("description", description, StandardBasicTypes.STRING)
+ .setParameter(ORG_ID, org.getId(), StandardBasicTypes.LONG);
}
else {
query = session.getNamedQuery("CryptoKey.findByDescAndNullOrg")
- .setParameter("description", description);
+ .setParameter("description", description, StandardBasicTypes.STRING);
}
return query.uniqueResult();
}
@@ -503,7 +500,7 @@ public static List lookupCryptoKeys(Org org) {
//look for Kickstart data by id
Session session = HibernateFactory.getSession();
return session.getNamedQuery("CryptoKey.findByOrg")
- .setParameter(ORG_ID, org.getId(), LongType.INSTANCE)
+ .setParameter(ORG_ID, org.getId(), StandardBasicTypes.LONG)
.list();
}
@@ -516,7 +513,7 @@ public static List lookupSslCryptoKeys(Org org) {
//look for Kickstart data by id
Session session = HibernateFactory.getSession();
return session.getNamedQuery("SslCryptoKey.findByOrg")
- .setParameter(ORG_ID, org.getId(), LongType.INSTANCE)
+ .setParameter(ORG_ID, org.getId(), StandardBasicTypes.LONG)
.list();
}
@@ -530,8 +527,8 @@ public static CryptoKey lookupCryptoKeyById(Long keyId, Org org) {
//look for Kickstart data by id
Session session = HibernateFactory.getSession();
return (CryptoKey) session.getNamedQuery("CryptoKey.findByIdAndOrg")
- .setParameter("key_id", keyId, LongType.INSTANCE)
- .setParameter(ORG_ID, org.getId(), LongType.INSTANCE)
+ .setParameter("key_id", keyId, StandardBasicTypes.LONG)
+ .setParameter(ORG_ID, org.getId(), StandardBasicTypes.LONG)
.uniqueResult();
}
@@ -545,8 +542,9 @@ public static SslCryptoKey lookupSslCryptoKeyById(Long keyId, Org org) {
//look for Kickstart data by id
Session session = HibernateFactory.getSession();
Query query = session.getNamedQuery("SslCryptoKey.findByIdAndOrg");
- return query.setParameter("key_id", keyId, LongType.INSTANCE)
- .setParameter(ORG_ID, org.getId(), LongType.INSTANCE)
+ return query
+ .setParameter("key_id", keyId, StandardBasicTypes.LONG)
+ .setParameter(ORG_ID, org.getId(), StandardBasicTypes.LONG)
.uniqueResult();
}
@@ -575,8 +573,8 @@ public static KickstartableTree lookupKickstartTreeByLabel(String label, Org org
Session session = HibernateFactory.getSession();
KickstartableTree retval = (KickstartableTree)
session.getNamedQuery("KickstartableTree.findByLabelAndOrg")
- .setParameter(LABEL, label)
- .setParameter(ORG_ID, org.getId(), LongType.INSTANCE)
+ .setParameter(LABEL, label, StandardBasicTypes.STRING)
+ .setParameter(ORG_ID, org.getId(), StandardBasicTypes.LONG)
.uniqueResult();
// If we don't find by label + org then
// we try by label and NULL org (RHN owned channel)
@@ -614,8 +612,8 @@ public static List lookupKickstartTreesByChannelAndOrg(Long c
String query = "KickstartableTree.findByChannelAndOrg";
Session session = HibernateFactory.getSession();
return session.getNamedQuery(query).
- setParameter("channel_id", channelId, LongType.INSTANCE).
- setParameter(ORG_ID, org.getId(), LongType.INSTANCE)
+ setParameter("channel_id", channelId, StandardBasicTypes.LONG).
+ setParameter(ORG_ID, org.getId(), StandardBasicTypes.LONG)
//Retrieve from cache if there
.setCacheable(true).list();
}
@@ -630,7 +628,7 @@ public static List lookupKickstartTreesByChannelAndNullOrg(
String query = "KickstartableTree.findByChannelAndNullOrg";
Session session = HibernateFactory.getSession();
return session.getNamedQuery(query)
- .setParameter("channel_id", channelId, LongType.INSTANCE)
+ .setParameter("channel_id", channelId, StandardBasicTypes.LONG)
// Retrieve from cache if there
.setCacheable(true).list();
}
@@ -651,8 +649,8 @@ public static List lookupKickstartableTrees(
query = "KickstartableTree.findByChannel";
session = HibernateFactory.getSession();
retval = session.getNamedQuery(query).
- setParameter("channel_id", channelId, LongType.INSTANCE).
- setParameter(ORG_ID, org.getId(), LongType.INSTANCE).
+ setParameter("channel_id", channelId, StandardBasicTypes.LONG).
+ setParameter(ORG_ID, org.getId(), StandardBasicTypes.LONG).
list();
return retval;
}
@@ -716,8 +714,8 @@ public static KickstartableTree lookupKickstartTreeByIdAndOrg(Long treeId, Org o
if (treeId != null && org != null) {
Session session = HibernateFactory.getSession();
Query query = session.getNamedQuery(queryName);
- query.setParameter(ORG_ID, org.getId(), LongType.INSTANCE);
- query.setParameter("tree_id", treeId, LongType.INSTANCE);
+ query.setParameter(ORG_ID, org.getId(), StandardBasicTypes.LONG);
+ query.setParameter("tree_id", treeId, StandardBasicTypes.LONG);
//Retrieve from cache if there
return query.setCacheable(true).uniqueResult();
}
@@ -738,7 +736,7 @@ public static KickstartableTree lookupKickstartTreeByIdAndOrg(Long treeId, Org o
public static KickstartSession lookupKickstartSessionByServer(Long sidIn) {
Session session = HibernateFactory.getSession();
List ksessions = session.getNamedQuery("KickstartSession.findByServer")
- .setParameter("server", sidIn, LongType.INSTANCE)
+ .setParameter("server", sidIn, StandardBasicTypes.LONG)
.list();
if (!ksessions.isEmpty()) {
return ksessions.iterator().next();
@@ -757,7 +755,7 @@ public static KickstartSession lookupKickstartSessionByServer(Long sidIn) {
Session session = HibernateFactory.getSession();
List ksessions = session.getNamedQuery(
"KickstartSession.findDefaultKickstartSessionForKickstartData")
- .setParameter("ksdata", ksdata.getId(), LongType.INSTANCE)
+ .setParameter("ksdata", ksdata.getId(), StandardBasicTypes.LONG)
.setParameter("mode", KickstartSession.MODE_DEFAULT_SESSION)
.list();
if (!ksessions.isEmpty()) {
@@ -796,7 +794,7 @@ public static void saveKickstartSession(KickstartSession ksession) {
public static List lookupAllKickstartSessionsByServer(Long sidIn) {
Session session = HibernateFactory.getSession();
return session.getNamedQuery("KickstartSession.findByServer")
- .setParameter("server", sidIn, LongType.INSTANCE)
+ .setParameter("server", sidIn, StandardBasicTypes.LONG)
.list();
}
@@ -829,9 +827,9 @@ public static boolean verifyTreeAssignment(Long channelId, Long orgId, Long tree
Session session = HibernateFactory.getSession();
Query query = session.
getNamedQuery("KickstartableTree.verifyTreeAssignment");
- query.setParameter("channel_id", channelId, LongType.INSTANCE);
- query.setParameter(ORG_ID, orgId, LongType.INSTANCE);
- query.setParameter("tree_id", treeId, LongType.INSTANCE);
+ query.setParameter("channel_id", channelId, StandardBasicTypes.LONG);
+ query.setParameter(ORG_ID, orgId, StandardBasicTypes.LONG);
+ query.setParameter("tree_id", treeId, StandardBasicTypes.LONG);
KickstartableTree tree = query.uniqueResult();
return tree != null;
}
@@ -907,7 +905,7 @@ public static List lookupKickstartDatasByTree(KickstartableTree t
String query = "KickstartData.lookupByTreeId";
Session session = HibernateFactory.getSession();
return session.getNamedQuery(query)
- .setParameter("kstree_id", tree.getId(), LongType.INSTANCE)
+ .setParameter("kstree_id", tree.getId(), StandardBasicTypes.LONG)
.list();
}
@@ -917,11 +915,9 @@ public static List lookupKickstartDatasByTree(KickstartableTree t
* @return List of KickstartData objects if found
*/
public static List listAllKickstartData() {
- Session session = getSession();
- Criteria c = session.createCriteria(KickstartData.class);
- // Hibernate does not filter out duplicate references by default
- c.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
- return c.list();
+ return HibernateFactory.getSession().createNativeQuery("""
+ SELECT DISTINCT * from rhnksdata
+ """, KickstartData.class).getResultList();
}
/**
@@ -947,7 +943,7 @@ public static KickstartData lookupOrgDefault(Org org) {
return (KickstartData) session
.getNamedQuery("KickstartData.findOrgDefault")
.setParameter("org", org)
- .setParameter("isOrgDefault", "Y", StringType.INSTANCE)
+ .setParameter("isOrgDefault", "Y", StandardBasicTypes.STRING)
.uniqueResult();
}
@@ -1077,8 +1073,8 @@ public static List lookupKsPackageByKsDataAndPackageName(
KickstartData ksData, PackageName packageName) {
return HibernateFactory.getSession()
.getNamedQuery("KickstartPackage.findByKickstartDataAndPackageName")
- .setParameter("ks_data", ksData.getId(), LongType.INSTANCE)
- .setParameter("package_name", packageName.getId(), LongType.INSTANCE)
+ .setParameter("ks_data", ksData.getId(), StandardBasicTypes.LONG)
+ .setParameter("package_name", packageName.getId(), StandardBasicTypes.LONG)
.list();
}
diff --git a/java/code/src/com/redhat/rhn/domain/kickstart/test/KickstartDataTest.java b/java/code/src/com/redhat/rhn/domain/kickstart/test/KickstartDataTest.java
index 7a2e27823060..5c2be650ee6d 100644
--- a/java/code/src/com/redhat/rhn/domain/kickstart/test/KickstartDataTest.java
+++ b/java/code/src/com/redhat/rhn/domain/kickstart/test/KickstartDataTest.java
@@ -74,7 +74,7 @@
import org.cobbler.Distro;
import org.cobbler.test.MockConnection;
import org.hibernate.Session;
-import org.hibernate.type.LongType;
+import org.hibernate.type.StandardBasicTypes;
import org.junit.jupiter.api.Test;
import java.io.File;
@@ -333,7 +333,7 @@ private KickstartData lookupById(Org orgIn, Long id) {
Session session = HibernateFactory.getSession();
return (KickstartData) session.getNamedQuery("KickstartData.findByIdAndOrg")
.setParameter("id", id)
- .setParameter("org_id", orgIn.getId(), LongType.INSTANCE)
+ .setParameter("org_id", orgIn.getId(), StandardBasicTypes.LONG)
.uniqueResult();
}
diff --git a/java/code/src/com/redhat/rhn/domain/notification/types/SubscriptionWarning.java b/java/code/src/com/redhat/rhn/domain/notification/types/SubscriptionWarning.java
index 0e03d8d7b0b4..efdae975f639 100644
--- a/java/code/src/com/redhat/rhn/domain/notification/types/SubscriptionWarning.java
+++ b/java/code/src/com/redhat/rhn/domain/notification/types/SubscriptionWarning.java
@@ -31,7 +31,7 @@ public class SubscriptionWarning implements NotificationData {
* @return boolean
**/
public boolean expiresSoon() {
- Optional result = getSession().createSQLQuery(
+ Optional result = getSession().createNativeQuery(
"select exists (select name, expires_at, status, subtype " +
"from susesccsubscription where subtype != 'internal' " +
" and ((status = 'ACTIVE' and expires_at < now() + interval '90 day') " +
diff --git a/java/code/src/com/redhat/rhn/domain/org/CustomDataKey.java b/java/code/src/com/redhat/rhn/domain/org/CustomDataKey.java
index 2ce9813b3e1d..13de0df9b1c7 100644
--- a/java/code/src/com/redhat/rhn/domain/org/CustomDataKey.java
+++ b/java/code/src/com/redhat/rhn/domain/org/CustomDataKey.java
@@ -14,17 +14,16 @@
*/
package com.redhat.rhn.domain.org;
+import com.redhat.rhn.domain.BaseDomainHelper;
import com.redhat.rhn.domain.user.User;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
-import java.util.Date;
-
/**
* CustomDataKey
*/
-public class CustomDataKey {
+public class CustomDataKey extends BaseDomainHelper {
private Long id;
private Org org;
@@ -32,21 +31,7 @@ public class CustomDataKey {
private String description;
private User creator;
private User lastModifier;
- private Date created;
- private Date modified;
- /**
- * @return Returns the created.
- */
- public Date getCreated() {
- return created;
- }
- /**
- * @param createdIn The created to set.
- */
- public void setCreated(Date createdIn) {
- this.created = createdIn;
- }
/**
* @return Returns the creator.
*/
@@ -107,18 +92,7 @@ public User getLastModifier() {
public void setLastModifier(User lastModifierIn) {
this.lastModifier = lastModifierIn;
}
- /**
- * @return Returns the modified.
- */
- public Date getModified() {
- return modified;
- }
- /**
- * @param modifiedIn The modified to set.
- */
- public void setModified(Date modifiedIn) {
- this.modified = modifiedIn;
- }
+
/**
* @return Returns the org.
*/
diff --git a/java/code/src/com/redhat/rhn/domain/org/OrgFactory.java b/java/code/src/com/redhat/rhn/domain/org/OrgFactory.java
index 25ccd5f4a4e0..764ac45d1127 100644
--- a/java/code/src/com/redhat/rhn/domain/org/OrgFactory.java
+++ b/java/code/src/com/redhat/rhn/domain/org/OrgFactory.java
@@ -36,7 +36,7 @@
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.hibernate.Session;
-import org.hibernate.type.LongType;
+import org.hibernate.type.StandardBasicTypes;
import java.sql.Types;
import java.util.Collections;
@@ -159,7 +159,7 @@ public static CustomDataKey lookupKeyById(Long cikid) {
Session session = HibernateFactory.getSession();
return (CustomDataKey) session.getNamedQuery("CustomDataKey.findById")
- .setParameter("id", cikid, LongType.INSTANCE)
+ .setParameter("id", cikid, StandardBasicTypes.LONG)
//Retrieve from cache if there
.setCacheable(true)
.uniqueResult();
@@ -234,7 +234,7 @@ public static Org lookupById(Long id) {
public static Long getActiveUsers(Org orgIn) {
Session session = HibernateFactory.getSession();
return (Long) session.getNamedQuery("Org.numOfActiveUsers")
- .setParameter(ORG_ID, orgIn.getId(), LongType.INSTANCE)
+ .setParameter(ORG_ID, orgIn.getId(), StandardBasicTypes.LONG)
.uniqueResult();
}
@@ -247,7 +247,7 @@ public static Long getActiveUsers(Org orgIn) {
public static Long getActiveSystems(Org orgIn) {
Session session = HibernateFactory.getSession();
return (Long) session.getNamedQuery("Org.numOfSystems")
- .setParameter(ORG_ID, orgIn.getId(), LongType.INSTANCE)
+ .setParameter(ORG_ID, orgIn.getId(), StandardBasicTypes.LONG)
.uniqueResult();
}
@@ -259,7 +259,7 @@ public static Long getActiveSystems(Org orgIn) {
public static Long getServerGroups(Org orgIn) {
Session session = HibernateFactory.getSession();
return (Long) session.getNamedQuery("Org.numOfServerGroups")
- .setParameter(ORG_ID, orgIn.getId(), LongType.INSTANCE)
+ .setParameter(ORG_ID, orgIn.getId(), StandardBasicTypes.LONG)
.uniqueResult();
}
@@ -271,7 +271,7 @@ public static Long getServerGroups(Org orgIn) {
public static Long getConfigChannels(Org orgIn) {
Session session = HibernateFactory.getSession();
return (Long) session.getNamedQuery("Org.numOfConfigChannels")
- .setParameter(ORG_ID, orgIn.getId(), LongType.INSTANCE)
+ .setParameter(ORG_ID, orgIn.getId(), StandardBasicTypes.LONG)
.uniqueResult();
}
diff --git a/java/code/src/com/redhat/rhn/domain/org/usergroup/UserGroup.java b/java/code/src/com/redhat/rhn/domain/org/usergroup/UserGroup.java
index a81b379b7ac0..4587d35bc281 100644
--- a/java/code/src/com/redhat/rhn/domain/org/usergroup/UserGroup.java
+++ b/java/code/src/com/redhat/rhn/domain/org/usergroup/UserGroup.java
@@ -17,6 +17,7 @@
import com.redhat.rhn.domain.role.Role;
+import java.io.Serializable;
import java.util.Date;
/**
@@ -26,7 +27,7 @@
*
* DB table: RHNUSERGROUP
*/
-public interface UserGroup {
+public interface UserGroup extends Serializable {
/**
* Getter for id
diff --git a/java/code/src/com/redhat/rhn/domain/product/SUSEProductFactory.java b/java/code/src/com/redhat/rhn/domain/product/SUSEProductFactory.java
index ec2b8d4ef4b8..e5caf88dd8e3 100644
--- a/java/code/src/com/redhat/rhn/domain/product/SUSEProductFactory.java
+++ b/java/code/src/com/redhat/rhn/domain/product/SUSEProductFactory.java
@@ -26,14 +26,11 @@
import com.redhat.rhn.domain.scc.SCCRepository;
import com.redhat.rhn.domain.server.InstalledProduct;
-import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
-import org.hibernate.Criteria;
import org.hibernate.Session;
-import org.hibernate.criterion.Disjunction;
-import org.hibernate.criterion.Order;
-import org.hibernate.criterion.Restrictions;
+import org.hibernate.query.Query;
+import org.hibernate.type.StandardBasicTypes;
import java.util.Collection;
import java.util.Comparator;
@@ -46,9 +43,7 @@
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import javax.persistence.criteria.CriteriaBuilder;
-import javax.persistence.criteria.CriteriaQuery;
-import javax.persistence.criteria.Root;
+import javax.persistence.NoResultException;
/**
* SUSEProductFactory - the class used to fetch and store
@@ -167,12 +162,16 @@ public static void remove(SUSEProduct product) {
@SuppressWarnings("unchecked")
public static void removeAllExcept(Collection products) {
if (!products.isEmpty()) {
- Collection ids = products.stream().map(SUSEProduct::getId).toList();
+ List ids = products.stream().map(SUSEProduct::getId).toList();
- Criteria c = getSession().createCriteria(SUSEProduct.class);
- c.add(Restrictions.not(Restrictions.in("id", ids)));
+ List productIds = getSession().createNativeQuery("""
+ SELECT * from suseProducts
+ WHERE id NOT IN (:ids)
+ """, SUSEProduct.class)
+ .setParameterList("ids", ids, StandardBasicTypes.LONG)
+ .getResultList();
- for (SUSEProduct product : (List) c.list()) {
+ for (SUSEProduct product : productIds) {
remove(product);
}
}
@@ -424,41 +423,56 @@ public static void remove(ChannelTemplate productRepo) {
public static SUSEProduct findSUSEProduct(String name, String version, String release,
String arch, boolean imprecise) {
- Criteria c = getSession().createCriteria(SUSEProduct.class);
- c.add(Restrictions.eq("name", name.toLowerCase()));
+ StringBuilder sqlQuery = new StringBuilder("SELECT * FROM suseProducts WHERE LOWER(name) = :name");
- Disjunction versionCriterion = Restrictions.disjunction();
- if (imprecise || version == null) {
- versionCriterion.add(Restrictions.isNull("version"));
+ if (version == null) {
+ sqlQuery.append(" AND version is NULL");
}
- if (version != null) {
- versionCriterion.add(Restrictions.eq("version", version.toLowerCase()));
+ else if (imprecise) {
+ sqlQuery.append(" AND (version IS NULL OR LOWER(version) = :version)");
+ }
+ else { // (!imprecise)
+ sqlQuery.append(" AND LOWER(version) = :version");
}
- c.add(versionCriterion);
- Disjunction releaseCriterion = Restrictions.disjunction();
- if (imprecise || release == null) {
- releaseCriterion.add(Restrictions.isNull("release"));
+ if (release == null) {
+ sqlQuery.append(" AND release is NULL");
}
- if (release != null) {
- releaseCriterion.add(Restrictions.eq("release", release.toLowerCase()));
+ else if (imprecise) {
+ sqlQuery.append(" AND (release IS NULL OR LOWER(release) = :release)");
+ }
+ else { // (!imprecise)
+ sqlQuery.append(" AND LOWER(release) = :release");
}
- c.add(releaseCriterion);
- Disjunction archCriterion = Restrictions.disjunction();
- if (imprecise || arch == null) {
- archCriterion.add(Restrictions.isNull("arch"));
+ PackageArch parch = PackageFactory.lookupPackageArchByLabel(arch);
+ Long archTypeId = (long) -1;
+ if (parch != null) {
+ archTypeId = parch.getId();
}
- if (arch != null) {
- archCriterion.add(Restrictions.eq("arch",
- PackageFactory.lookupPackageArchByLabel(arch)));
+ if (imprecise || archTypeId == -1) {
+ sqlQuery.append(" AND (arch_type_id IS NULL OR arch_type_id = :arch)");
+ }
+ else {
+ sqlQuery.append(" AND arch_type_id = :arch");
}
- c.add(archCriterion);
- c.addOrder(Order.asc("name")).addOrder(Order.asc("version"))
- .addOrder(Order.asc("release")).addOrder(Order.asc("arch"));
+ // Add ordering
+ sqlQuery.append(" ORDER BY name ASC, version ASC, release ASC, arch_type_id ASC");
- List result = c.list();
+ // Execute the query
+ Query query = getSession().createNativeQuery(sqlQuery.toString(), SUSEProduct.class)
+ .setParameter("name", name.toLowerCase(), StandardBasicTypes.STRING)
+ .setParameter("arch", archTypeId, StandardBasicTypes.LONG);
+ if (version != null) {
+ query.setParameter("version", version.toLowerCase(), StandardBasicTypes.STRING);
+ }
+ if (release != null) {
+ query.setParameter("release", release.toLowerCase(), StandardBasicTypes.STRING);
+ }
+
+
+ List result = query.getResultList();
return result.isEmpty() ? null : result.get(0);
}
@@ -479,10 +493,17 @@ public static SUSEProduct getProductById(Long id) {
* @return SUSE product for given productId
*/
public static SUSEProduct lookupByProductId(long productId) {
- Session session = getSession();
- Criteria c = session.createCriteria(SUSEProduct.class);
- c.add(Restrictions.eq("productId", productId));
- return (SUSEProduct) c.uniqueResult();
+ try {
+ return getSession().createNativeQuery("""
+ SELECT * from suseProducts
+ WHERE product_id = :product
+ """, SUSEProduct.class)
+ .setParameter("product", productId, StandardBasicTypes.LONG)
+ .getSingleResult();
+ }
+ catch (NoResultException e) {
+ return null;
+ }
}
/**
@@ -490,8 +511,8 @@ public static SUSEProduct lookupByProductId(long productId) {
* @return map of SUSE products with productId as key
*/
public static Map productsByProductIds() {
- Session session = getSession();
- return session.createQuery("from com.redhat.rhn.domain.product.SUSEProduct", SUSEProduct.class)
+ return getSession().createNativeQuery("SELECT * from suseProducts ", SUSEProduct.class)
+ .getResultList()
.stream()
.collect(Collectors.toMap(SUSEProduct::getProductId, p -> p));
}
@@ -501,11 +522,11 @@ public static Map productsByProductIds() {
* @return SUSEProductExtensions which are recommended
*/
public static List allRecommendedExtensions() {
- CriteriaBuilder builder = getSession().getCriteriaBuilder();
- CriteriaQuery criteria = builder.createQuery(SUSEProductExtension.class);
- Root root = criteria.from(SUSEProductExtension.class);
- criteria.where(builder.equal(root.get("recommended"), true));
- return getSession().createQuery(criteria).getResultList();
+ return getSession().createNativeQuery("""
+ SELECT * from suseProductExtension
+ WHERE recommended = 'Y'
+ """, SUSEProductExtension.class)
+ .getResultList();
}
/**
@@ -529,9 +550,8 @@ public static List allRecommendedExtensionsOfRoot(SUSEProd
*/
@SuppressWarnings("unchecked")
public static List findAllSUSEProductChannels() {
- Session session = getSession();
- Criteria c = session.createCriteria(SUSEProductChannel.class);
- return c.list();
+ return getSession().createNativeQuery("SELECT * from SUSEProductChannel", SUSEProductChannel.class)
+ .getResultList();
}
/**
@@ -544,18 +564,20 @@ public static List findAllSUSEProductChannels() {
public static Optional findSUSEProductExtension(SUSEProduct root,
SUSEProduct base,
SUSEProduct ext) {
- Session session = getSession();
-
- Criteria c = session.createCriteria(SUSEProductExtension.class)
- .add(Restrictions.eq("rootProduct", root))
- .add(Restrictions.eq("baseProduct", base))
- .add(Restrictions.eq("extensionProduct", ext));
- SUSEProductExtension result = (SUSEProductExtension) c.uniqueResult();
- if (result == null) {
- return Optional.empty();
+ try {
+ return Optional.ofNullable(getSession().createNativeQuery("""
+ SELECT * from suseProductExtension
+ WHERE base_pdid = :baseid
+ AND ext_pdid = :extid
+ AND root_pdid = :rootid
+ """, SUSEProductExtension.class)
+ .setParameter("baseid", base.getId(), StandardBasicTypes.LONG)
+ .setParameter("extid", ext.getId(), StandardBasicTypes.LONG)
+ .setParameter("rootid", root.getId(), StandardBasicTypes.LONG)
+ .getSingleResult());
}
- else {
- return Optional.of(result);
+ catch (NoResultException e) {
+ return Optional.empty();
}
}
@@ -563,11 +585,9 @@ public static Optional findSUSEProductExtension(SUSEProduc
* Find all {@link SUSEProductExtension}.
* @return list of product extension
*/
- @SuppressWarnings("unchecked")
public static List findAllSUSEProductExtensions() {
- Session session = getSession();
- Criteria c = session.createCriteria(SUSEProductExtension.class);
- return c.list();
+ return getSession().createNativeQuery("SELECT * from suseProductExtension", SUSEProductExtension.class)
+ .getResultList();
}
/**
@@ -580,7 +600,8 @@ public static List findAllExtensionProductsForRootOf(SUSEProduct ba
Map params = new HashMap<>();
params.put("baseId", base.getId());
params.put("rootId", root.getId());
- return singleton.listObjectsByNamedQuery("SUSEProductExtension.findAllExtensionProductsForRootOf", params);
+ return singleton.listObjectsByNamedQuery(
+ "SUSEProductExtension.findAllExtensionProductsForRootOf", params);
}
/**
@@ -591,12 +612,14 @@ public static List findAllExtensionProductsForRootOf(SUSEProduct ba
*/
@SuppressWarnings("unchecked")
public static List findAllProductExtensionsOf(SUSEProduct product, SUSEProduct root) {
- Session session = getSession();
-
- Criteria c = session.createCriteria(SUSEProductExtension.class)
- .add(Restrictions.eq("rootProduct", root))
- .add(Restrictions.eq("baseProduct", product));
- return c.list();
+ return getSession().createNativeQuery("""
+ SELECT * from suseProductExtension
+ WHERE base_pdid = :baseid
+ AND root_pdid = :rootid
+ """, SUSEProductExtension.class)
+ .setParameter("baseid", product.getId(), StandardBasicTypes.LONG)
+ .setParameter("rootid", root.getId(), StandardBasicTypes.LONG)
+ .getResultList();
}
/**
@@ -638,7 +661,10 @@ public static List findAllRootProductsOf(SUSEProduct prd) {
*/
@SuppressWarnings("unchecked")
public static List findAllSUSEProducts() {
- return getSession().createCriteria(SUSEProduct.class).list();
+ return getSession().createNativeQuery("""
+ SELECT * from suseProducts
+ """, SUSEProduct.class)
+ .getResultList();
}
/**
@@ -668,21 +694,53 @@ public static List findAllExtensionsOfRootProduct(SUSEProduct root)
public static Optional findInstalledProduct(String name,
String version, String release, PackageArch arch, boolean isBaseProduct) {
- Criteria c = getSession().createCriteria(InstalledProduct.class);
- c.add(Restrictions.eq("name", name));
- c.add(Restrictions.eq("version", version));
- if (StringUtils.isEmpty(release)) {
- c.add(Restrictions.isNull("release"));
+
+ StringBuilder sqlQuery = new StringBuilder("SELECT * FROM suseInstalledProduct WHERE LOWER(name) = :name");
+
+ if (version == null) {
+ sqlQuery.append(" AND (version IS NULL OR LOWER(version) = :version");
+ version = "";
}
else {
- c.add(Restrictions.eq("release", release));
+ sqlQuery.append(" AND LOWER(version) = :version");
}
- c.add(Restrictions.eq("arch", arch));
- c.add(Restrictions.eq("baseproduct", isBaseProduct));
- c.addOrder(Order.asc("name")).addOrder(Order.asc("version"))
- .addOrder(Order.asc("release")).addOrder(Order.asc("arch"));
- return c.list().stream().findFirst();
+
+ if (release == null) {
+ sqlQuery.append(" AND (release IS NULL OR LOWER(release) = :release)");
+ release = "";
+ }
+ else {
+ sqlQuery.append(" AND LOWER(release) = :release");
+ }
+
+ Long archTypeId = (long) -1;
+ if (arch != null) {
+ archTypeId = arch.getId();
+ }
+ sqlQuery.append(" AND arch_type_id = :arch");
+
+ if (isBaseProduct) {
+ sqlQuery.append(" AND is_baseproduct = 'Y'");
+ }
+ else {
+ sqlQuery.append(" AND is_baseproduct = 'N'");
+ }
+
+
+ // Add ordering
+ sqlQuery.append(" ORDER BY name ASC, version ASC, release ASC, arch_type_id ASC");
+
+ // Execute the query
+ Query query = getSession().createNativeQuery(sqlQuery.toString(), InstalledProduct.class)
+ .setParameter("name", name.toLowerCase(), StandardBasicTypes.STRING)
+ .setParameter("version", version.toLowerCase(), StandardBasicTypes.STRING)
+ .setParameter("release", release.toLowerCase(), StandardBasicTypes.STRING)
+ .setParameter("arch", archTypeId, StandardBasicTypes.LONG);
+
+ List result = query.getResultList();
+
+ return result.stream().findFirst();
}
/**
diff --git a/java/code/src/com/redhat/rhn/domain/recurringactions/RecurringAction.java b/java/code/src/com/redhat/rhn/domain/recurringactions/RecurringAction.java
index bd70ea85bf74..e697119bdb39 100644
--- a/java/code/src/com/redhat/rhn/domain/recurringactions/RecurringAction.java
+++ b/java/code/src/com/redhat/rhn/domain/recurringactions/RecurringAction.java
@@ -23,6 +23,7 @@
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
+import org.hibernate.annotations.Type;
import java.util.List;
@@ -204,7 +205,7 @@ public void setCronExpr(String cronExprIn) {
* @return active - if action is active
*/
@Column
- @org.hibernate.annotations.Type(type = "yes_no")
+ @Type(type = "yes_no")
public boolean isActive() {
return active;
}
diff --git a/java/code/src/com/redhat/rhn/domain/recurringactions/type/RecurringActionType.java b/java/code/src/com/redhat/rhn/domain/recurringactions/type/RecurringActionType.java
index 2d4bc8dc55a6..aa10434739d7 100644
--- a/java/code/src/com/redhat/rhn/domain/recurringactions/type/RecurringActionType.java
+++ b/java/code/src/com/redhat/rhn/domain/recurringactions/type/RecurringActionType.java
@@ -17,6 +17,8 @@
import com.redhat.rhn.domain.recurringactions.RecurringAction;
+import java.io.Serializable;
+
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Inheritance;
@@ -31,7 +33,7 @@
*/
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
-public abstract class RecurringActionType {
+public abstract class RecurringActionType implements Serializable {
private long id;
private RecurringAction recurringAction;
diff --git a/java/code/src/com/redhat/rhn/domain/rhnpackage/PackageEvr.java b/java/code/src/com/redhat/rhn/domain/rhnpackage/PackageEvr.java
index b09473e04f7a..10e610b25859 100644
--- a/java/code/src/com/redhat/rhn/domain/rhnpackage/PackageEvr.java
+++ b/java/code/src/com/redhat/rhn/domain/rhnpackage/PackageEvr.java
@@ -21,10 +21,12 @@
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
+import java.io.Serializable;
+
/**
* PackageEvr
*/
-public class PackageEvr implements Comparable {
+public class PackageEvr implements Comparable, Serializable {
private static final RpmVersionComparator RPMVERCMP = new RpmVersionComparator();
private static final DebVersionComparator DEBVERCMP = new DebVersionComparator();
diff --git a/java/code/src/com/redhat/rhn/domain/rhnpackage/PackageEvrFactory.java b/java/code/src/com/redhat/rhn/domain/rhnpackage/PackageEvrFactory.java
index b3e1c1399918..b7c848a84c58 100644
--- a/java/code/src/com/redhat/rhn/domain/rhnpackage/PackageEvrFactory.java
+++ b/java/code/src/com/redhat/rhn/domain/rhnpackage/PackageEvrFactory.java
@@ -19,6 +19,7 @@
import com.redhat.rhn.common.hibernate.HibernateFactory;
import org.hibernate.Session;
+import org.hibernate.type.StandardBasicTypes;
import java.sql.Types;
import java.util.HashMap;
@@ -95,8 +96,9 @@ public static PackageEvr lookupOrCreatePackageEvr(String e, String v, String r,
*/
public static PackageEvr lookupPackageEvrById(Long id) {
Session session = HibernateFactory.getSession();
- return (PackageEvr) session.getNamedQuery("PackageEvr.findById").setLong(
- "id", id).uniqueResult();
+ return (PackageEvr) session.getNamedQuery("PackageEvr.findById")
+ .setParameter("id", id, StandardBasicTypes.LONG)
+ .uniqueResult();
}
/**
@@ -111,10 +113,10 @@ public static Optional lookupPackageEvrByEvr(
String epoch, String version, String release, PackageType type) {
Session session = HibernateFactory.getSession();
return (Optional) session.getNamedQuery("PackageEvr.lookupByEvr")
- .setString("e_in", epoch)
- .setString("v_in", version)
- .setString("r_in", release)
- .setString("t_in", type.getDbString())
+ .setParameter("e_in", epoch, StandardBasicTypes.STRING)
+ .setParameter("v_in", version, StandardBasicTypes.STRING)
+ .setParameter("r_in", release, StandardBasicTypes.STRING)
+ .setParameter("t_in", type.getDbString(), StandardBasicTypes.STRING)
.uniqueResultOptional();
}
diff --git a/java/code/src/com/redhat/rhn/domain/rhnpackage/PackageFactory.java b/java/code/src/com/redhat/rhn/domain/rhnpackage/PackageFactory.java
index 196bd19a81c2..61485dee6b9b 100644
--- a/java/code/src/com/redhat/rhn/domain/rhnpackage/PackageFactory.java
+++ b/java/code/src/com/redhat/rhn/domain/rhnpackage/PackageFactory.java
@@ -33,6 +33,7 @@
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.hibernate.Session;
+import org.hibernate.type.StandardBasicTypes;
import java.sql.Types;
import java.util.ArrayList;
@@ -300,7 +301,8 @@ public static long lookupOrCreatePackageNameId(String name) {
*/
public static PackageName lookupPackageName(Long id) {
return (PackageName) HibernateFactory.getSession().getNamedQuery("PackageName.findById")
- .setLong("id", id).uniqueResult();
+ .setParameter("id", id, StandardBasicTypes.LONG)
+ .uniqueResult();
}
/**
@@ -313,7 +315,8 @@ public static PackageName lookupPackageName(Long id) {
*/
public static PackageName lookupPackageName(String pn) {
return (PackageName) HibernateFactory.getSession().getNamedQuery("PackageName.findByName")
- .setString("name", pn).uniqueResult();
+ .setParameter("name", pn, StandardBasicTypes.STRING)
+ .uniqueResult();
}
/**
@@ -325,7 +328,8 @@ public static PackageName lookupPackageName(String pn) {
@SuppressWarnings("unchecked")
public static List lookupOrphanPackages(Org org) {
return HibernateFactory.getSession().getNamedQuery("Package.listOrphans")
- .setParameter("org", org).list();
+ .setParameter("org", org)
+ .list();
}
/**
@@ -342,9 +346,13 @@ public static List lookupByNevra(Org org, String name, String version,
String release, String epoch, PackageArch arch) {
List packages = HibernateFactory.getSession().getNamedQuery(
- "Package.lookupByNevra").setParameter("org", org).setString("name", name)
- .setString("version", version).setString("release", release).setParameter(
- "arch", arch).list();
+ "Package.lookupByNevra")
+ .setParameter("org", org)
+ .setParameter("name", name, StandardBasicTypes.STRING)
+ .setParameter("version", version, StandardBasicTypes.STRING)
+ .setParameter("release", release, StandardBasicTypes.STRING)
+ .setParameter("arch", arch)
+ .list();
if (epoch == null || packages.size() < 2) {
return packages;
@@ -365,9 +373,9 @@ public static List lookupByNevraIds(Org org, long nameId, long evrId, l
return HibernateFactory.getSession().createNamedQuery("Package.lookupByNevraIds", Package.class)
.setParameter("org", org)
- .setParameter("nameId", nameId)
- .setParameter("evrId", evrId)
- .setParameter("archId", archId)
+ .setParameter("nameId", nameId, StandardBasicTypes.LONG)
+ .setParameter("evrId", evrId, StandardBasicTypes.LONG)
+ .setParameter("archId", archId, StandardBasicTypes.LONG)
.list();
}
@@ -388,12 +396,12 @@ public static Package lookupByChannelLabelNevraCs(String channel, String name,
@SuppressWarnings("unchecked")
List packages = HibernateFactory.getSession()
.getNamedQuery("Package.lookupByChannelLabelNevraCs")
- .setString("channel", channel)
- .setString("name", name)
- .setString("version", version)
- .setString("release", release)
- .setString("arch", arch)
- .setString("checksum", checksum.orElse(null))
+ .setParameter("channel", channel, StandardBasicTypes.STRING)
+ .setParameter("name", name, StandardBasicTypes.STRING)
+ .setParameter("version", version, StandardBasicTypes.STRING)
+ .setParameter("release", release, StandardBasicTypes.STRING)
+ .setParameter("arch", arch, StandardBasicTypes.STRING)
+ .setParameter("checksum", checksum.orElse(null), StandardBasicTypes.STRING)
.list();
if (packages.isEmpty()) {
diff --git a/java/code/src/com/redhat/rhn/domain/rhnpackage/PackageName.java b/java/code/src/com/redhat/rhn/domain/rhnpackage/PackageName.java
index ff07fada36a6..48ee0bdd0a23 100644
--- a/java/code/src/com/redhat/rhn/domain/rhnpackage/PackageName.java
+++ b/java/code/src/com/redhat/rhn/domain/rhnpackage/PackageName.java
@@ -18,10 +18,12 @@
import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.apache.commons.lang3.builder.ToStringBuilder;
+import java.io.Serializable;
+
/**
* PackageName
*/
-public class PackageName implements Comparable {
+public class PackageName implements Comparable, Serializable {
private Long id;
private String name;
diff --git a/java/code/src/com/redhat/rhn/domain/rhnpackage/profile/test/ProfileTest.java b/java/code/src/com/redhat/rhn/domain/rhnpackage/profile/test/ProfileTest.java
index 9c7dcd4bb866..da175648a306 100644
--- a/java/code/src/com/redhat/rhn/domain/rhnpackage/profile/test/ProfileTest.java
+++ b/java/code/src/com/redhat/rhn/domain/rhnpackage/profile/test/ProfileTest.java
@@ -80,8 +80,8 @@ public void testProfileEquals() throws Exception {
public static Profile lookupByIdAndOrg(Long id, Org org) {
Session session = HibernateFactory.getSession();
return (Profile) session.getNamedQuery("Profile.findByIdAndOrg")
- .setLong("id", id)
- .setLong("org_id", org.getId())
+ .setParameter("id", id)
+ .setParameter("org_id", org.getId())
.uniqueResult();
}
@@ -126,8 +126,8 @@ public void testCompatibleServer() throws Exception {
session.flush();
Query qry = session.getNamedQuery("Profile.compatibleWithServer");
- qry.setLong("sid", server.getId());
- qry.setLong("org_id", user.getOrg().getId());
+ qry.setParameter("sid", server.getId());
+ qry.setParameter("org_id", user.getOrg().getId());
List list = qry.list();
assertNotNull(list, "List is null");
assertFalse(list.isEmpty(), "List is empty");
diff --git a/java/code/src/com/redhat/rhn/domain/rhnpackage/profile/test/ProfileTypeTest.java b/java/code/src/com/redhat/rhn/domain/rhnpackage/profile/test/ProfileTypeTest.java
index 5ab04b4044ad..4a1e94828765 100644
--- a/java/code/src/com/redhat/rhn/domain/rhnpackage/profile/test/ProfileTypeTest.java
+++ b/java/code/src/com/redhat/rhn/domain/rhnpackage/profile/test/ProfileTypeTest.java
@@ -23,6 +23,7 @@
import com.redhat.rhn.testing.RhnBaseTestCase;
import org.hibernate.Session;
+import org.hibernate.type.StandardBasicTypes;
import org.junit.jupiter.api.Test;
/**
@@ -73,7 +74,7 @@ public void testFindByLabel() throws Exception {
public static ProfileType lookupByLabel(String label) {
Session session = HibernateFactory.getSession();
return (ProfileType) session.getNamedQuery("ProfileType.findByLabel")
- .setString("label", label)
+ .setParameter("label", label, StandardBasicTypes.STRING)
//Retrieve from cache if there
.setCacheable(true)
.uniqueResult();
diff --git a/java/code/src/com/redhat/rhn/domain/role/RoleFactory.java b/java/code/src/com/redhat/rhn/domain/role/RoleFactory.java
index 6f4ad8e277b5..502972b18f11 100644
--- a/java/code/src/com/redhat/rhn/domain/role/RoleFactory.java
+++ b/java/code/src/com/redhat/rhn/domain/role/RoleFactory.java
@@ -19,6 +19,7 @@
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.hibernate.Session;
+import org.hibernate.type.StandardBasicTypes;
/**
* RoleFactory
@@ -56,7 +57,7 @@ protected Logger getLogger() {
public static Role lookupById(Long id) {
Session session = HibernateFactory.getSession();
return (Role) session.getNamedQuery("Role.findById")
- .setLong("id", id)
+ .setParameter("id", id, StandardBasicTypes.LONG)
//Retrieve from cache if there
.setCacheable(true)
.uniqueResult();
@@ -70,7 +71,7 @@ public static Role lookupById(Long id) {
public static Role lookupByLabel(String name) {
Session session = HibernateFactory.getSession();
return (Role) session.getNamedQuery("Role.findByLabel")
- .setString("label", name)
+ .setParameter("label", name, StandardBasicTypes.STRING)
//Retrieve from cache if there
.setCacheable(true)
.uniqueResult();
diff --git a/java/code/src/com/redhat/rhn/domain/scc/SCCCachingFactory.java b/java/code/src/com/redhat/rhn/domain/scc/SCCCachingFactory.java
index 6f24b45f0377..ab540c8bc64b 100644
--- a/java/code/src/com/redhat/rhn/domain/scc/SCCCachingFactory.java
+++ b/java/code/src/com/redhat/rhn/domain/scc/SCCCachingFactory.java
@@ -35,9 +35,7 @@
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
-import org.hibernate.Criteria;
-import org.hibernate.Session;
-import org.hibernate.criterion.Restrictions;
+import org.hibernate.type.StandardBasicTypes;
import java.math.BigDecimal;
import java.util.ArrayList;
@@ -49,19 +47,17 @@
import java.util.HashSet;
import java.util.List;
import java.util.Map;
+import java.util.NoSuchElementException;
import java.util.Optional;
import java.util.Set;
+import java.util.stream.Collectors;
import java.util.stream.Stream;
-import javax.persistence.criteria.CriteriaBuilder;
-import javax.persistence.criteria.CriteriaDelete;
-import javax.persistence.criteria.CriteriaQuery;
-import javax.persistence.criteria.Root;
+import javax.persistence.NoResultException;
/**
* Factory class for populating and reading from SCC caching tables.
- */
-public class SCCCachingFactory extends HibernateFactory {
+ */public class SCCCachingFactory extends HibernateFactory {
private static Logger log = LogManager.getLogger(SCCCachingFactory.class);
private static SCCCachingFactory singleton = new SCCCachingFactory();
@@ -107,13 +103,8 @@ public static List lookupRepositories() {
* Clear all repositories from the database.
*/
public static void clearRepositories() {
- CriteriaBuilder builder = getSession().getCriteriaBuilder();
- CriteriaDelete delete = builder.createCriteriaDelete(SCCRepository.class);
- CriteriaDelete deleteAuth = builder.createCriteriaDelete(SCCRepositoryAuth.class);
- delete.from(SCCRepository.class);
- deleteAuth.from(SCCRepositoryAuth.class);
- getSession().createQuery(deleteAuth).executeUpdate();
- getSession().createQuery(delete).executeUpdate();
+ getSession().createNativeQuery("DELETE FROM suseSCCRepositoryAuth").executeUpdate();
+ getSession().createNativeQuery("DELETE FROM suseSCCRepository").executeUpdate();
}
/**
@@ -176,9 +167,8 @@ public static SCCSubscription saveJsonSubscription(SCCSubscriptionJson jsonSub,
@SuppressWarnings("unchecked")
public static List lookupSubscriptions() {
log.debug("Retrieving subscriptions from cache");
- Session session = getSession();
- Criteria c = session.createCriteria(SCCSubscription.class);
- return c.list();
+ return getSession().createNativeQuery("SELECT * from suseSCCSubscription", SCCSubscription.class)
+ .getResultList();
}
/**
@@ -190,20 +180,22 @@ public static SCCSubscription lookupSubscriptionBySccId(Long id) {
if (id == null) {
return null;
}
- Session session = getSession();
- Criteria c = session.createCriteria(SCCSubscription.class);
- c.add(Restrictions.eq("sccId", id));
- return (SCCSubscription) c.uniqueResult();
+ try {
+ return getSession().createNativeQuery("SELECT * from suseSCCSubscription WHERE scc_id = :scc",
+ SCCSubscription.class)
+ .setParameter("scc", id , StandardBasicTypes.LONG)
+ .getSingleResult();
+ }
+ catch (NoResultException e) {
+ return null;
+ }
}
+
/**
* Clear all subscriptions from the database.
*/
public static void clearSubscriptions() {
- CriteriaBuilder builder = getSession().getCriteriaBuilder();
- CriteriaDelete delete = builder.createCriteriaDelete(SCCSubscription.class);
- delete.from(SCCSubscription.class);
- getSession().createQuery(delete).executeUpdate();
-
+ getSession().createNativeQuery("DELETE FROM suseSCCSubscription");
}
/**
@@ -213,9 +205,8 @@ public static void clearSubscriptions() {
@SuppressWarnings("unchecked")
public static List lookupOrderItems() {
log.debug("Retrieving orderItems from cache");
- Session session = getSession();
- Criteria c = session.createCriteria(SCCOrderItem.class);
- return c.list();
+ return getSession().createNativeQuery("SELECT * from suseSCCOrderItem", SCCOrderItem.class)
+ .getResultList();
}
/**
@@ -225,14 +216,13 @@ public static List lookupOrderItems() {
*/
public static List listOrderItemsByCredentials(ContentSyncSource source) {
return source.getCredentials()
- .map(credentials -> {
- CriteriaBuilder builder = getSession().getCriteriaBuilder();
- CriteriaQuery query = builder.createQuery(SCCOrderItem.class);
- Root root = query.from(SCCOrderItem.class);
- query.where(builder.equal(root.get("credentials"), credentials));
- return getSession().createQuery(query).getResultList();
- })
- .orElse(Collections.emptyList());
+ .map(credentials -> getSession().createNativeQuery("""
+ SELECT * from suseSCCOrderItem
+ WHERE credentials_id = :credentials
+ """, SCCOrderItem.class)
+ .setParameter("credentials", credentials, StandardBasicTypes.LONG)
+ .getResultList())
+ .orElse(Collections.emptyList());
}
/**
@@ -241,12 +231,10 @@ public static List listOrderItemsByCredentials(ContentSyncSource s
* @return the OrderItem
*/
public static Optional lookupOrderItemBySccId(Long sccId) {
- CriteriaBuilder builder = getSession().getCriteriaBuilder();
- CriteriaQuery query = builder.createQuery(SCCOrderItem.class);
- Root root = query.from(SCCOrderItem.class);
- query.where(
- builder.equal(root.get("sccId"), sccId));
- return getSession().createQuery(query).uniqueResultOptional();
+ return getSession().createNativeQuery("SELECT * from suseSCCOrderItem WHERE scc_id = :scc",
+ SCCOrderItem.class)
+ .setParameter("scc", sccId, StandardBasicTypes.LONG)
+ .uniqueResultOptional();
}
/**
@@ -345,15 +333,19 @@ public static boolean refreshNeeded(Optional lastRefreshDateIn) {
* @return list of scc subscription ids
*/
public static List listSubscriptionsIdsByCredentials(RemoteCredentials c) {
- CriteriaBuilder builder = getSession().getCriteriaBuilder();
- CriteriaQuery query = builder.createQuery(SCCSubscription.class);
- Root root = query.from(SCCSubscription.class);
- query.where(builder.equal(root.get("credentials"), c));
- List result = new ArrayList<>();
- for (SCCSubscription sub : getSession().createQuery(query).getResultList()) {
- result.add(sub.getSccId());
+ if (c == null || c.getId() == null) {
+ return getSession().createNativeQuery("SELECT * from suseSCCSubscription WHERE credentials_id IS NULL",
+ SCCSubscription.class)
+ .getResultList().stream().map(SCCSubscription::getSccId).collect(Collectors.toList());
+ }
+ else {
+ return getSession().createNativeQuery("""
+ SELECT * from suseSCCSubscription
+ WHERE credentials_id = :credentials
+ """, SCCSubscription.class)
+ .setParameter("credentials", c.getId(), StandardBasicTypes.LONG)
+ .getResultList().stream().map(SCCSubscription::getSccId).collect(Collectors.toList());
}
- return result;
}
/**
@@ -373,11 +365,15 @@ public static void deleteSubscriptionBySccId(Long sccSubId) {
* @return a SCCRepository
*/
public static Optional lookupRepositoryBySccId(Long sccId) {
- CriteriaBuilder builder = getSession().getCriteriaBuilder();
- CriteriaQuery select = builder.createQuery(SCCRepository.class);
- Root root = select.from(SCCRepository.class);
- select.where(builder.equal(root.get("sccId"), sccId));
- return getSession().createQuery(select).uniqueResultOptional();
+ try {
+ return getSession().createNativeQuery("SELECT * from suseSCCRepository WHERE scc_id = :scc",
+ SCCRepository.class)
+ .setParameter("scc", sccId, StandardBasicTypes.LONG)
+ .uniqueResultOptional();
+ }
+ catch (NoSuchElementException e) {
+ return Optional.empty();
+ }
}
/**
@@ -386,11 +382,16 @@ public static Optional lookupRepositoryBySccId(Long sccId) {
* @return the repository if found
*/
public static Optional lookupRepositoryByName(String name) {
- CriteriaBuilder builder = getSession().getCriteriaBuilder();
- CriteriaQuery select = builder.createQuery(SCCRepository.class);
- Root root = select.from(SCCRepository.class);
- select.where(builder.equal(root.get("name"), name));
- return getSession().createQuery(select).uniqueResultOptional();
+ try {
+
+ return getSession().createNativeQuery("SELECT * from suseSCCRepository WHERE name = :name",
+ SCCRepository.class)
+ .setParameter("name", name, StandardBasicTypes.STRING)
+ .uniqueResultOptional();
+ }
+ catch (NoSuchElementException e) {
+ return Optional.empty();
+ }
}
/**
@@ -399,16 +400,9 @@ public static Optional lookupRepositoryByName(String name) {
* @return a list of SCCRepositoriesAuth
*/
public static List lookupRepositoryAuthByCredential(ContentSyncSource source) {
- CriteriaBuilder builder = getSession().getCriteriaBuilder();
- CriteriaQuery select = builder.createQuery(SCCRepositoryAuth.class);
- Root root = select.from(SCCRepositoryAuth.class);
-
- source.getCredentials().ifPresentOrElse(
- remoteCredentials -> select.where(builder.equal(root.get("credentials"), remoteCredentials)),
- () -> select.where(builder.isNull(root.get("credentials")))
- );
-
- return getSession().createQuery(select).getResultList();
+ return source.getCredentials()
+ .map(SCCCachingFactory::lookupRepositoryAuthByCredential)
+ .orElseGet(List::of);
}
/**
@@ -417,37 +411,35 @@ public static List lookupRepositoryAuthByCredential(ContentSy
* @return a list of SCCRepositoriesAuth
*/
public static List lookupRepositoryAuthByCredential(Credentials c) {
- CriteriaBuilder builder = getSession().getCriteriaBuilder();
- CriteriaQuery select = builder.createQuery(SCCRepositoryAuth.class);
- Root root = select.from(SCCRepositoryAuth.class);
if (c != null) {
- select.where(builder.equal(root.get("credentials"), c));
+ return getSession().createNativeQuery("""
+ SELECT * from suseSCCRepositoryAuth
+ WHERE credentials_id = :credentials
+ """, SCCRepositoryAuth.class)
+ .setParameter("credentials", c.getId(), StandardBasicTypes.LONG)
+ .getResultList();
}
else {
- select.where(builder.isNull(root.get("credentials")));
+ return getSession().createNativeQuery("SELECT * from suseSCCRepositoryAuth WHERE credentials_id IS null",
+ SCCRepositoryAuth.class)
+ .getResultList();
}
- return getSession().createQuery(select).getResultList();
}
/**
* @return return a list of all {@link SCCRepositoryAuth} objects
*/
public static List lookupRepositoryAuth() {
- CriteriaBuilder builder = getSession().getCriteriaBuilder();
- CriteriaQuery select = builder.createQuery(SCCRepositoryAuth.class);
- select.from(SCCRepositoryAuth.class);
- return getSession().createQuery(select).getResultList();
+ return getSession().createNativeQuery("SELECT * from suseSCCRepositoryAuth", SCCRepositoryAuth.class)
+ .getResultList();
}
/**
* @return a list of repository auth objects which are linked to a {@link ContentSource}
*/
public static List lookupRepositoryAuthWithContentSource() {
- CriteriaBuilder builder = getSession().getCriteriaBuilder();
- CriteriaQuery select = builder.createQuery(SCCRepositoryAuth.class);
- Root root = select.from(SCCRepositoryAuth.class);
- select.where(builder.isNotNull(root.get("contentSource")));
- return getSession().createQuery(select).getResultList();
+ return getSession().createNativeQuery("SELECT * from suseSCCRepositoryAuth WHERE source_id IS NOT null",
+ SCCRepositoryAuth.class).getResultList();
}
/**
@@ -631,12 +623,10 @@ public static List