JAVA-20163 Upgrade hibernate specific modules to JDK 11 (#13817)

* JAVA-20163 Migration hibernate-annotations

* JAVA-20163 Migrate hibernate-queries

* JAVA-20163 Migrating hibernate-mapping

* JAVA-20163 rename reserved keywords, update inheritance example

* JAVA-20163 Migrate hibernate-ogm module to the jdk 8 because hibernate-ogm doesn't support jakarta API

* JAVA-20163 Migrate hibernate-enterprise module

* JAVA-20163 Add update to HibernateExceptionUnitTest#whenQueryExecutedWithUnmappedEntity_thenMappingException

* JAVA-20163 Set explicit version for hibernate 6.1.7.Final in the hibernate-queries module

* JAVA-20163 Fix failed test with port that already exists (giving another port 8088)

* JAVA-20163 Fix other location after changing the port

* JAVA-20163 Remove duplicate Unit Test

---------

Co-authored-by: n <noreplay@yahoo.com>
Co-authored-by: Loredana Crusoveanu <lore.crusoveanu@gmail.com>
This commit is contained in:
timis1 2023-05-12 16:36:06 +03:00 committed by GitHub
parent 000149dd33
commit e7d1d56c47
117 changed files with 816 additions and 787 deletions

View File

@ -76,13 +76,18 @@
<version>${org.springframework.version}</version> <version>${org.springframework.version}</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency>
<groupId>io.hypersistence</groupId>
<artifactId>hypersistence-utils-hibernate-60</artifactId>
<version>3.3.1</version>
</dependency>
</dependencies> </dependencies>
<properties> <properties>
<!-- Spring --> <!-- Spring -->
<org.springframework.version>5.0.2.RELEASE</org.springframework.version> <org.springframework.version>6.0.6</org.springframework.version>
<org.springframework.data.version>1.10.6.RELEASE</org.springframework.data.version> <org.springframework.data.version>3.0.3</org.springframework.data.version>
<hibernate-core.version>5.6.7.Final</hibernate-core.version> <hibernate-core.version>6.1.7.Final</hibernate-core.version>
<maven.deploy.skip>true</maven.deploy.skip> <maven.deploy.skip>true</maven.deploy.skip>
<tomcat-dbcp.version>9.0.0.M26</tomcat-dbcp.version> <tomcat-dbcp.version>9.0.0.M26</tomcat-dbcp.version>
</properties> </properties>

View File

@ -2,9 +2,9 @@ package com.baeldung.hibernate.creationupdatetimestamp.model;
import java.time.Instant; import java.time.Instant;
import javax.persistence.Entity; import jakarta.persistence.Entity;
import javax.persistence.GeneratedValue; import jakarta.persistence.GeneratedValue;
import javax.persistence.Id; import jakarta.persistence.Id;
import org.hibernate.annotations.CreationTimestamp; import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp; import org.hibernate.annotations.UpdateTimestamp;

View File

@ -1,11 +1,11 @@
package com.baeldung.hibernate.customtypes; package com.baeldung.hibernate.customtypes;
import org.hibernate.HibernateException; import org.hibernate.HibernateException;
import org.hibernate.engine.spi.SessionFactoryImplementor;
import org.hibernate.engine.spi.SharedSessionContractImplementor; import org.hibernate.engine.spi.SharedSessionContractImplementor;
import org.hibernate.type.IntegerType; import org.hibernate.metamodel.spi.ValueAccess;
import org.hibernate.type.StringType;
import org.hibernate.type.Type;
import org.hibernate.usertype.CompositeUserType; import org.hibernate.usertype.CompositeUserType;
import org.hibernate.usertype.UserType;
import java.io.Serializable; import java.io.Serializable;
import java.sql.PreparedStatement; import java.sql.PreparedStatement;
@ -14,74 +14,51 @@ import java.sql.SQLException;
import java.sql.Types; import java.sql.Types;
import java.util.Objects; import java.util.Objects;
public class AddressType implements CompositeUserType { public class AddressType implements CompositeUserType<Address>, UserType<Address> {
@Override @Override
public String[] getPropertyNames() { public Object getPropertyValue(Address component, int property) throws HibernateException {
return new String[]{"addressLine1", "addressLine2",
"city", "country", "zipcode"};
}
@Override
public Type[] getPropertyTypes() {
return new Type[]{StringType.INSTANCE, StringType.INSTANCE,
StringType.INSTANCE, StringType.INSTANCE, IntegerType.INSTANCE};
}
@Override
public Object getPropertyValue(Object component, int property) throws HibernateException {
Address empAdd = (Address) component;
switch (property) { switch (property) {
case 0: case 0:
return empAdd.getAddressLine1(); return component.getAddressLine1();
case 1: case 1:
return empAdd.getAddressLine2(); return component.getAddressLine2();
case 2: case 2:
return empAdd.getCity(); return component.getCity();
case 3: case 3:
return empAdd.getCountry(); return component.getCountry();
case 4: case 4:
return Integer.valueOf(empAdd.getZipCode()); return component.getZipCode();
default:
throw new IllegalArgumentException(property +
" is an invalid property index for class type " +
component.getClass().getName());
} }
throw new IllegalArgumentException(property +
" is an invalid property index for class type " +
component.getClass().getName());
} }
@Override @Override
public void setPropertyValue(Object component, int property, Object value) throws HibernateException { public Address instantiate(ValueAccess values, SessionFactoryImplementor sessionFactory) {
return null;
Address empAdd = (Address) component;
switch (property) {
case 0:
empAdd.setAddressLine1((String) value);
case 1:
empAdd.setAddressLine2((String) value);
case 2:
empAdd.setCity((String) value);
case 3:
empAdd.setCountry((String) value);
case 4:
empAdd.setZipCode((Integer) value);
}
throw new IllegalArgumentException(property +
" is an invalid property index for class type " +
component.getClass().getName());
} }
@Override @Override
public Class returnedClass() { public Class<?> embeddable() {
return Address.class; return Address.class;
} }
@Override @Override
public boolean equals(Object x, Object y) throws HibernateException { public int getSqlType() {
return Types.VARCHAR;
}
@Override
public Class<Address> returnedClass() {
return Address.class;
}
@Override
public boolean equals(Address x, Address y) {
if (x == y) if (x == y)
return true; return true;
@ -92,57 +69,52 @@ public class AddressType implements CompositeUserType {
} }
@Override @Override
public int hashCode(Object x) throws HibernateException { public int hashCode(Address x) {
return x.hashCode(); return x.hashCode();
} }
@Override @Override
public Object nullSafeGet(ResultSet rs, String[] names, SharedSessionContractImplementor session, Object owner) throws HibernateException, SQLException { public Address nullSafeGet(ResultSet rs, int position, SharedSessionContractImplementor session, Object owner) throws SQLException {
Address empAdd = new Address(); Address empAdd = new Address();
empAdd.setAddressLine1(rs.getString(names[0])); empAdd.setAddressLine1(rs.getString(position));
if (rs.wasNull()) if (rs.wasNull())
return null; return null;
empAdd.setAddressLine2(rs.getString(names[1])); empAdd.setAddressLine2(rs.getString(position));
empAdd.setCity(rs.getString(names[2])); empAdd.setCity(rs.getString(position));
empAdd.setCountry(rs.getString(names[3])); empAdd.setCountry(rs.getString(position));
empAdd.setZipCode(rs.getInt(names[4])); empAdd.setZipCode(rs.getInt(position));
return empAdd; return empAdd;
} }
@Override @Override
public void nullSafeSet(PreparedStatement st, Object value, int index, SharedSessionContractImplementor session) throws HibernateException, SQLException { public void nullSafeSet(PreparedStatement st, Address value, int index, SharedSessionContractImplementor session) throws SQLException {
if (Objects.isNull(value)) if (Objects.isNull(value))
st.setNull(index, Types.VARCHAR); st.setNull(index, Types.VARCHAR);
else { else {
Address empAdd = (Address) value; st.setString(index, value.getAddressLine1());
st.setString(index, empAdd.getAddressLine1()); st.setString(index + 1, value.getAddressLine2());
st.setString(index + 1, empAdd.getAddressLine2()); st.setString(index + 2, value.getCity());
st.setString(index + 2, empAdd.getCity()); st.setString(index + 3, value.getCountry());
st.setString(index + 3, empAdd.getCountry()); st.setInt(index + 4, value.getZipCode());
st.setInt(index + 4, empAdd.getZipCode());
} }
} }
@Override @Override
public Object deepCopy(Object value) throws HibernateException { public Address deepCopy(Address value) {
if (Objects.isNull(value)) if (Objects.isNull(value))
return null; return null;
Address oldEmpAdd = (Address) value;
Address newEmpAdd = new Address(); Address newEmpAdd = new Address();
newEmpAdd.setAddressLine1(oldEmpAdd.getAddressLine1()); newEmpAdd.setAddressLine1(value.getAddressLine1());
newEmpAdd.setAddressLine2(oldEmpAdd.getAddressLine2()); newEmpAdd.setAddressLine2(value.getAddressLine2());
newEmpAdd.setCity(oldEmpAdd.getCity()); newEmpAdd.setCity(value.getCity());
newEmpAdd.setCountry(oldEmpAdd.getCountry()); newEmpAdd.setCountry(value.getCountry());
newEmpAdd.setZipCode(oldEmpAdd.getZipCode()); newEmpAdd.setZipCode(value.getZipCode());
return newEmpAdd; return newEmpAdd;
} }
@ -153,17 +125,27 @@ public class AddressType implements CompositeUserType {
} }
@Override @Override
public Serializable disassemble(Object value, SharedSessionContractImplementor session) throws HibernateException { public Serializable disassemble(Address value) {
return (Serializable) deepCopy(value); return (Serializable) deepCopy(value);
} }
@Override @Override
public Object assemble(Serializable cached, SharedSessionContractImplementor session, Object owner) throws HibernateException { public Address assemble(Serializable cached, Object owner) {
return deepCopy(cached); return deepCopy((Address) cached);
} }
@Override @Override
public Object replace(Object original, Object target, SharedSessionContractImplementor session, Object owner) throws HibernateException { public Address replace(Address detached, Address managed, Object owner) {
return original; return detached;
}
@Override
public boolean isInstance(Object object, SessionFactoryImplementor sessionFactory) {
return CompositeUserType.super.isInstance(object, sessionFactory);
}
@Override
public boolean isSameClass(Object object, SessionFactoryImplementor sessionFactory) {
return CompositeUserType.super.isSameClass(object, sessionFactory);
} }
} }

View File

@ -1,14 +1,14 @@
package com.baeldung.hibernate.customtypes; package com.baeldung.hibernate.customtypes;
import org.hibernate.type.LocalDateType;
import org.hibernate.type.descriptor.WrapperOptions; import org.hibernate.type.descriptor.WrapperOptions;
import org.hibernate.type.descriptor.java.AbstractTypeDescriptor;
import org.hibernate.type.descriptor.java.ImmutableMutabilityPlan; import org.hibernate.type.descriptor.java.ImmutableMutabilityPlan;
import org.hibernate.type.descriptor.java.MutabilityPlan;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class LocalDateStringJavaDescriptor extends AbstractTypeDescriptor<LocalDate> { import io.hypersistence.utils.hibernate.type.array.internal.AbstractArrayTypeDescriptor;
public class LocalDateStringJavaDescriptor extends AbstractArrayTypeDescriptor<LocalDate> {
public static final LocalDateStringJavaDescriptor INSTANCE = new LocalDateStringJavaDescriptor(); public static final LocalDateStringJavaDescriptor INSTANCE = new LocalDateStringJavaDescriptor();
@ -18,12 +18,12 @@ public class LocalDateStringJavaDescriptor extends AbstractTypeDescriptor<LocalD
@Override @Override
public String toString(LocalDate value) { public String toString(LocalDate value) {
return LocalDateType.FORMATTER.format(value); return DateTimeFormatter.ISO_LOCAL_DATE.format(value);
} }
@Override @Override
public LocalDate fromString(String string) { public LocalDate fromString(CharSequence string) {
return LocalDate.from(LocalDateType.FORMATTER.parse(string)); return LocalDate.from( DateTimeFormatter.ISO_LOCAL_DATE.parse(string));
} }
@Override @Override
@ -33,7 +33,7 @@ public class LocalDateStringJavaDescriptor extends AbstractTypeDescriptor<LocalD
return null; return null;
if (String.class.isAssignableFrom(type)) if (String.class.isAssignableFrom(type))
return (X) LocalDateType.FORMATTER.format(value); return (X) DateTimeFormatter.ISO_LOCAL_DATE.format(value);
throw unknownUnwrap(type); throw unknownUnwrap(type);
} }
@ -44,7 +44,7 @@ public class LocalDateStringJavaDescriptor extends AbstractTypeDescriptor<LocalD
return null; return null;
if(String.class.isInstance(value)) if(String.class.isInstance(value))
return LocalDate.from(LocalDateType.FORMATTER.parse((CharSequence) value)); return LocalDate.from( DateTimeFormatter.ISO_LOCAL_DATE.parse((CharSequence) value));
throw unknownWrap(value.getClass()); throw unknownWrap(value.getClass());
} }

View File

@ -2,18 +2,16 @@ package com.baeldung.hibernate.customtypes;
import org.hibernate.dialect.Dialect; import org.hibernate.dialect.Dialect;
import org.hibernate.type.AbstractSingleColumnStandardBasicType; import org.hibernate.type.AbstractSingleColumnStandardBasicType;
import org.hibernate.type.DiscriminatorType; import org.hibernate.type.descriptor.jdbc.VarcharJdbcType;
import org.hibernate.type.descriptor.java.LocalDateJavaDescriptor;
import org.hibernate.type.descriptor.sql.VarcharTypeDescriptor;
import java.time.LocalDate; import java.time.LocalDate;
public class LocalDateStringType extends AbstractSingleColumnStandardBasicType<LocalDate> implements DiscriminatorType<LocalDate> { public class LocalDateStringType extends AbstractSingleColumnStandardBasicType<LocalDate> {
public static final LocalDateStringType INSTANCE = new LocalDateStringType(); public static final LocalDateStringType INSTANCE = new LocalDateStringType();
public LocalDateStringType() { public LocalDateStringType() {
super(VarcharTypeDescriptor.INSTANCE, LocalDateStringJavaDescriptor.INSTANCE); super(VarcharJdbcType.INSTANCE, LocalDateStringJavaDescriptor.INSTANCE);
} }
@Override @Override
@ -21,14 +19,12 @@ public class LocalDateStringType extends AbstractSingleColumnStandardBasicType<L
return "LocalDateString"; return "LocalDateString";
} }
@Override public LocalDate stringToObject(String xml) {
public LocalDate stringToObject(String xml) throws Exception {
return fromString(xml); return fromString(xml);
} }
@Override public String objectToSQLString(LocalDate value, Dialect dialect) {
public String objectToSQLString(LocalDate value, Dialect dialect) throws Exception { return '\'' + LocalDateStringJavaDescriptor.INSTANCE.toString(value) + '\'';
return '\'' + toString(value) + '\'';
} }
} }

View File

@ -1,20 +1,19 @@
package com.baeldung.hibernate.customtypes; package com.baeldung.hibernate.customtypes;
import org.hibernate.annotations.Columns; import org.hibernate.annotations.CompositeType;
import org.hibernate.annotations.Parameter; import org.hibernate.annotations.Parameter;
import org.hibernate.annotations.Type; import org.hibernate.annotations.Type;
import org.hibernate.annotations.TypeDef; import org.hibernate.usertype.UserTypeLegacyBridge;
import javax.persistence.Column; import jakarta.persistence.AttributeOverride;
import javax.persistence.Entity; import jakarta.persistence.AttributeOverrides;
import javax.persistence.GeneratedValue; import jakarta.persistence.Column;
import javax.persistence.Id; import jakarta.persistence.Entity;
import javax.persistence.Table; import jakarta.persistence.GeneratedValue;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import java.time.LocalDate; import java.time.LocalDate;
@TypeDef(name = "PhoneNumber",
typeClass = PhoneNumberType.class,
defaultForType = PhoneNumber.class)
@Entity @Entity
@Table(name = "OfficeEmployee") @Table(name = "OfficeEmployee")
public class OfficeEmployee { public class OfficeEmployee {
@ -24,25 +23,36 @@ public class OfficeEmployee {
private long id; private long id;
@Column @Column
@Type(type = "LocalDateString") @Type(
value = UserTypeLegacyBridge.class,
parameters = @Parameter(name = UserTypeLegacyBridge.TYPE_NAME_PARAM_KEY, value = "LocalDateString")
)
private LocalDate dateOfJoining; private LocalDate dateOfJoining;
@Columns(columns = {@Column(name = "country_code"), @AttributeOverrides({
@Column(name = "city_code"), @AttributeOverride(name = "countryCode", column = @Column(name = "country_code")),
@Column(name = "number")}) @AttributeOverride(name = "cityCode", column = @Column(name = "city_code")),
@AttributeOverride(name = "number", column = @Column(name = "number"))
})
@Type(value = PhoneNumberType.class)
private PhoneNumber employeeNumber; private PhoneNumber employeeNumber;
@Columns(columns = {@Column(name = "address_line_1"), @CompositeType(value = com.baeldung.hibernate.customtypes.AddressType.class)
@Column(name = "address_line_2"), @AttributeOverrides({
@Column(name = "city"), @Column(name = "country"), @AttributeOverride(name = "addressLine1", column = @Column(name = "address_line_1")),
@Column(name = "zip_code")}) @AttributeOverride(name = "addressLine2", column = @Column(name = "address_line_2")),
@Type(type = "com.baeldung.hibernate.customtypes.AddressType") @AttributeOverride(name = "city", column = @Column(name = "city")),
@AttributeOverride(name = "country", column = @Column(name = "country")),
@AttributeOverride(name = "zipCode", column = @Column(name = "zip_code"))
})
private Address empAddress; private Address empAddress;
@Type(type = "com.baeldung.hibernate.customtypes.SalaryType", @Type(value = com.baeldung.hibernate.customtypes.SalaryType.class,
parameters = {@Parameter(name = "currency", value = "USD")}) parameters = {@Parameter(name = "currency", value = "USD")})
@Columns(columns = {@Column(name = "amount"), @AttributeOverrides({
@Column(name = "currency")}) @AttributeOverride(name = "amount", column = @Column(name = "amount")),
@AttributeOverride(name = "currency", column = @Column(name = "currency"))
})
private Salary salary; private Salary salary;
public Salary getSalary() { public Salary getSalary() {

View File

@ -2,11 +2,11 @@ package com.baeldung.hibernate.customtypes;
import java.util.Objects; import java.util.Objects;
public final class PhoneNumber { public class PhoneNumber {
private final int countryCode; private int countryCode;
private final int cityCode; private int cityCode;
private final int number; private int number;
public PhoneNumber(int countryCode, int cityCode, int number) { public PhoneNumber(int countryCode, int cityCode, int number) {
this.countryCode = countryCode; this.countryCode = countryCode;

View File

@ -1,6 +1,5 @@
package com.baeldung.hibernate.customtypes; package com.baeldung.hibernate.customtypes;
import org.hibernate.HibernateException;
import org.hibernate.engine.spi.SharedSessionContractImplementor; import org.hibernate.engine.spi.SharedSessionContractImplementor;
import org.hibernate.usertype.UserType; import org.hibernate.usertype.UserType;
@ -11,11 +10,11 @@ import java.sql.SQLException;
import java.sql.Types; import java.sql.Types;
import java.util.Objects; import java.util.Objects;
public class PhoneNumberType implements UserType<PhoneNumber> {
public class PhoneNumberType implements UserType {
@Override @Override
public int[] sqlTypes() { public int getSqlType() {
return new int[]{Types.INTEGER, Types.INTEGER, Types.INTEGER}; return Types.INTEGER;
} }
@Override @Override
@ -24,7 +23,7 @@ public class PhoneNumberType implements UserType {
} }
@Override @Override
public boolean equals(Object x, Object y) throws HibernateException { public boolean equals(PhoneNumber x, PhoneNumber y) {
if (x == y) if (x == y)
return true; return true;
if (Objects.isNull(x) || Objects.isNull(y)) if (Objects.isNull(x) || Objects.isNull(y))
@ -34,48 +33,42 @@ public class PhoneNumberType implements UserType {
} }
@Override @Override
public int hashCode(Object x) throws HibernateException { public int hashCode(PhoneNumber x) {
return x.hashCode(); return x.hashCode();
} }
@Override @Override
public Object nullSafeGet(ResultSet rs, String[] names, SharedSessionContractImplementor session, Object owner) throws HibernateException, SQLException { public PhoneNumber nullSafeGet(ResultSet rs, int position, SharedSessionContractImplementor session, Object owner) throws SQLException {
int countryCode = rs.getInt(names[0]); int countryCode = rs.getInt(position);
if (rs.wasNull()) if (rs.wasNull())
return null; return null;
int cityCode = rs.getInt(names[1]); int cityCode = rs.getInt(position);
int number = rs.getInt(names[2]); int number = rs.getInt(position);
PhoneNumber employeeNumber = new PhoneNumber(countryCode, cityCode, number);
return employeeNumber; return new PhoneNumber(countryCode, cityCode, number);
} }
@Override @Override
public void nullSafeSet(PreparedStatement st, Object value, int index, SharedSessionContractImplementor session) throws HibernateException, SQLException { public void nullSafeSet(PreparedStatement st, PhoneNumber value, int index, SharedSessionContractImplementor session) throws SQLException {
if (Objects.isNull(value)) { if (Objects.isNull(value)) {
st.setNull(index, Types.INTEGER); st.setNull(index, Types.INTEGER);
st.setNull(index+1, Types.INTEGER); st.setNull(index+1, Types.INTEGER);
st.setNull(index+2, Types.INTEGER); st.setNull(index+2, Types.INTEGER);
} else { } else {
PhoneNumber employeeNumber = (PhoneNumber) value; st.setInt(index, value.getCountryCode());
st.setInt(index,employeeNumber.getCountryCode()); st.setInt(index+1, value.getCityCode());
st.setInt(index+1,employeeNumber.getCityCode()); st.setInt(index+2, value.getNumber());
st.setInt(index+2,employeeNumber.getNumber());
} }
} }
@Override @Override
public Object deepCopy(Object value) throws HibernateException { public PhoneNumber deepCopy(PhoneNumber value) {
if (Objects.isNull(value)) if (Objects.isNull(value))
return null; return null;
PhoneNumber empNumber = (PhoneNumber) value; return new PhoneNumber(value.getCountryCode(), value.getCityCode(), value.getNumber());
PhoneNumber newEmpNumber = new PhoneNumber(empNumber.getCountryCode(),empNumber.getCityCode(),empNumber.getNumber());
return newEmpNumber;
} }
@Override @Override
@ -84,17 +77,17 @@ public class PhoneNumberType implements UserType {
} }
@Override @Override
public Serializable disassemble(Object value) throws HibernateException { public Serializable disassemble(PhoneNumber value) {
return (Serializable) value; return (Serializable) value;
} }
@Override @Override
public Object assemble(Serializable cached, Object owner) throws HibernateException { public PhoneNumber assemble(Serializable cached, Object owner) {
return cached; return (PhoneNumber) cached;
} }
@Override @Override
public Object replace(Object original, Object target, Object owner) throws HibernateException { public PhoneNumber replace(PhoneNumber detached, PhoneNumber managed, Object owner) {
return original; return detached;
} }
} }

View File

@ -1,12 +1,12 @@
package com.baeldung.hibernate.customtypes; package com.baeldung.hibernate.customtypes;
import org.hibernate.HibernateException; import org.hibernate.HibernateException;
import org.hibernate.engine.spi.SessionFactoryImplementor;
import org.hibernate.engine.spi.SharedSessionContractImplementor; import org.hibernate.engine.spi.SharedSessionContractImplementor;
import org.hibernate.type.LongType; import org.hibernate.metamodel.spi.ValueAccess;
import org.hibernate.type.StringType;
import org.hibernate.type.Type;
import org.hibernate.usertype.CompositeUserType; import org.hibernate.usertype.CompositeUserType;
import org.hibernate.usertype.DynamicParameterizedType; import org.hibernate.usertype.DynamicParameterizedType;
import org.hibernate.usertype.UserType;
import java.io.Serializable; import java.io.Serializable;
import java.sql.PreparedStatement; import java.sql.PreparedStatement;
@ -16,65 +16,47 @@ import java.sql.Types;
import java.util.Objects; import java.util.Objects;
import java.util.Properties; import java.util.Properties;
public class SalaryType implements CompositeUserType, DynamicParameterizedType { public class SalaryType implements UserType<Salary>, CompositeUserType<Salary>, DynamicParameterizedType {
private String localCurrency; private String localCurrency;
@Override @Override
public String[] getPropertyNames() { public Object getPropertyValue(Salary component, int property) throws HibernateException {
return new String[]{"amount", "currency"};
}
@Override
public Type[] getPropertyTypes() {
return new Type[]{LongType.INSTANCE, StringType.INSTANCE};
}
@Override
public Object getPropertyValue(Object component, int property) throws HibernateException {
Salary salary = (Salary) component;
switch (property) { switch (property) {
case 0: case 0:
return salary.getAmount(); return component.getAmount();
case 1: case 1:
return salary.getCurrency(); return component.getCurrency();
default:
throw new IllegalArgumentException(property +
" is an invalid property index for class type " +
component.getClass().getName());
} }
throw new IllegalArgumentException(property +
" is an invalid property index for class type " +
component.getClass().getName());
}
@Override
public void setPropertyValue(Object component, int property, Object value) throws HibernateException {
Salary salary = (Salary) component;
switch (property) {
case 0:
salary.setAmount((Long) value);
case 1:
salary.setCurrency((String) value);
}
throw new IllegalArgumentException(property +
" is an invalid property index for class type " +
component.getClass().getName());
} }
@Override @Override
public Class returnedClass() { public Salary instantiate(ValueAccess values, SessionFactoryImplementor sessionFactory) {
return null;
}
@Override
public Class<?> embeddable() {
return Salary.class; return Salary.class;
} }
@Override @Override
public boolean equals(Object x, Object y) throws HibernateException { public int getSqlType() {
return Types.BIGINT;
}
@Override
public Class<Salary> returnedClass() {
return Salary.class;
}
@Override
public boolean equals(Salary x, Salary y) {
if (x == y) if (x == y)
return true; return true;
@ -82,54 +64,48 @@ public class SalaryType implements CompositeUserType, DynamicParameterizedType {
return false; return false;
return x.equals(y); return x.equals(y);
} }
@Override @Override
public int hashCode(Object x) throws HibernateException { public int hashCode(Salary x) {
return x.hashCode(); return x.hashCode();
} }
@Override @Override
public Object nullSafeGet(ResultSet rs, String[] names, SharedSessionContractImplementor session, Object owner) throws HibernateException, SQLException { public Salary nullSafeGet(ResultSet rs, int position, SharedSessionContractImplementor session, Object owner) throws SQLException {
Salary salary = new Salary(); Salary salary = new Salary();
salary.setAmount(rs.getLong(names[0])); salary.setAmount(rs.getLong(position));
if (rs.wasNull()) if (rs.wasNull())
return null; return null;
salary.setCurrency(rs.getString(names[1])); salary.setCurrency(rs.getString(position));
return salary; return salary;
} }
@Override @Override
public void nullSafeSet(PreparedStatement st, Object value, int index, SharedSessionContractImplementor session) throws HibernateException, SQLException { public void nullSafeSet(PreparedStatement st, Salary value, int index, SharedSessionContractImplementor session) throws SQLException {
if (Objects.isNull(value)) if (Objects.isNull(value))
st.setNull(index, Types.BIGINT); st.setNull(index, Types.BIGINT);
else { else {
Salary salary = (Salary) value; st.setLong(index, SalaryCurrencyConvertor.convert(
st.setLong(index, SalaryCurrencyConvertor.convert(salary.getAmount(), value.getAmount(),
salary.getCurrency(), localCurrency)); value.getCurrency(), localCurrency));
st.setString(index + 1, salary.getCurrency()); st.setString(index + 1, value.getCurrency());
} }
} }
@Override @Override
public Object deepCopy(Object value) throws HibernateException { public Salary deepCopy(Salary value) {
if (Objects.isNull(value)) if (Objects.isNull(value))
return null; return null;
Salary oldSal = (Salary) value;
Salary newSal = new Salary(); Salary newSal = new Salary();
newSal.setAmount(oldSal.getAmount()); newSal.setAmount(value.getAmount());
newSal.setCurrency(oldSal.getCurrency()); newSal.setCurrency(value.getCurrency());
return newSal; return newSal;
} }
@ -140,18 +116,18 @@ public class SalaryType implements CompositeUserType, DynamicParameterizedType {
} }
@Override @Override
public Serializable disassemble(Object value, SharedSessionContractImplementor session) throws HibernateException { public Serializable disassemble(Salary value) {
return (Serializable) deepCopy(value); return (Serializable) deepCopy(value);
} }
@Override @Override
public Object assemble(Serializable cached, SharedSessionContractImplementor session, Object owner) throws HibernateException { public Salary assemble(Serializable cached, Object owner) {
return deepCopy(cached); return deepCopy((Salary) cached);
} }
@Override @Override
public Object replace(Object original, Object target, SharedSessionContractImplementor session, Object owner) throws HibernateException { public Salary replace(Salary detached, Salary managed, Object owner) {
return original; return detached;
} }
@Override @Override

View File

@ -4,7 +4,7 @@ import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType; import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.Immutable; import org.hibernate.annotations.Immutable;
import javax.persistence.*; import jakarta.persistence.*;
import java.util.Set; import java.util.Set;
@Entity @Entity

View File

@ -3,7 +3,7 @@ package com.baeldung.hibernate.immutable.entities;
import org.hibernate.annotations.GenericGenerator; import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.Immutable; import org.hibernate.annotations.Immutable;
import javax.persistence.*; import jakarta.persistence.*;
@Entity @Entity
@Immutable @Immutable

View File

@ -1,12 +1,12 @@
package com.baeldung.hibernate.joincolumn; package com.baeldung.hibernate.joincolumn;
import javax.persistence.Entity; import jakarta.persistence.Entity;
import javax.persistence.FetchType; import jakarta.persistence.FetchType;
import javax.persistence.GeneratedValue; import jakarta.persistence.GeneratedValue;
import javax.persistence.GenerationType; import jakarta.persistence.GenerationType;
import javax.persistence.Id; import jakarta.persistence.Id;
import javax.persistence.JoinColumn; import jakarta.persistence.JoinColumn;
import javax.persistence.ManyToOne; import jakarta.persistence.ManyToOne;
@Entity @Entity
public class Email { public class Email {

View File

@ -1,13 +1,13 @@
package com.baeldung.hibernate.joincolumn; package com.baeldung.hibernate.joincolumn;
import javax.persistence.Entity; import jakarta.persistence.Entity;
import javax.persistence.FetchType; import jakarta.persistence.FetchType;
import javax.persistence.GeneratedValue; import jakarta.persistence.GeneratedValue;
import javax.persistence.GenerationType; import jakarta.persistence.GenerationType;
import javax.persistence.Id; import jakarta.persistence.Id;
import javax.persistence.JoinColumn; import jakarta.persistence.JoinColumn;
import javax.persistence.JoinColumns; import jakarta.persistence.JoinColumns;
import javax.persistence.ManyToOne; import jakarta.persistence.ManyToOne;
@Entity @Entity
public class Office { public class Office {

View File

@ -1,10 +1,10 @@
package com.baeldung.hibernate.joincolumn; package com.baeldung.hibernate.joincolumn;
import javax.persistence.Column; import jakarta.persistence.Column;
import javax.persistence.Entity; import jakarta.persistence.Entity;
import javax.persistence.GeneratedValue; import jakarta.persistence.GeneratedValue;
import javax.persistence.GenerationType; import jakarta.persistence.GenerationType;
import javax.persistence.Id; import jakarta.persistence.Id;
@Entity @Entity
public class OfficeAddress { public class OfficeAddress {

View File

@ -1,12 +1,12 @@
package com.baeldung.hibernate.joincolumn; package com.baeldung.hibernate.joincolumn;
import java.util.List; import java.util.List;
import javax.persistence.Entity; import jakarta.persistence.Entity;
import javax.persistence.FetchType; import jakarta.persistence.FetchType;
import javax.persistence.GeneratedValue; import jakarta.persistence.GeneratedValue;
import javax.persistence.GenerationType; import jakarta.persistence.GenerationType;
import javax.persistence.Id; import jakarta.persistence.Id;
import javax.persistence.OneToMany; import jakarta.persistence.OneToMany;
@Entity @Entity
public class OfficialEmployee { public class OfficialEmployee {

View File

@ -3,12 +3,12 @@ package com.baeldung.hibernate.lazycollection.model;
import org.hibernate.annotations.LazyCollection; import org.hibernate.annotations.LazyCollection;
import org.hibernate.annotations.LazyCollectionOption; import org.hibernate.annotations.LazyCollectionOption;
import javax.persistence.GeneratedValue; import jakarta.persistence.GeneratedValue;
import javax.persistence.GenerationType; import jakarta.persistence.GenerationType;
import javax.persistence.Id; import jakarta.persistence.Id;
import javax.persistence.OrderColumn; import jakarta.persistence.OrderColumn;
import javax.persistence.OneToMany; import jakarta.persistence.OneToMany;
import javax.persistence.Entity; import jakarta.persistence.Entity;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;

View File

@ -1,11 +1,10 @@
package com.baeldung.hibernate.lazycollection.model; package com.baeldung.hibernate.lazycollection.model;
import javax.persistence.GeneratedValue; import jakarta.persistence.GeneratedValue;
import javax.persistence.GenerationType; import jakarta.persistence.GenerationType;
import javax.persistence.Id; import jakarta.persistence.Id;
import javax.persistence.OrderColumn; import jakarta.persistence.ManyToOne;
import javax.persistence.ManyToOne; import jakarta.persistence.Entity;
import javax.persistence.Entity;
@Entity @Entity
public class Employee { public class Employee {

View File

@ -43,8 +43,8 @@ public class HibernateAnnotationUtil {
return metadata.buildSessionFactory(); return metadata.buildSessionFactory();
} }
private static Map<String, String> dbSettings() { private static Map<String, Object> dbSettings() {
Map<String, String> dbSettings = new HashMap<>(); Map<String, Object> dbSettings = new HashMap<>();
dbSettings.put(Environment.URL, "jdbc:h2:mem:spring_hibernate_one_to_many"); dbSettings.put(Environment.URL, "jdbc:h2:mem:spring_hibernate_one_to_many");
dbSettings.put(Environment.USER, "sa"); dbSettings.put(Environment.USER, "sa");
dbSettings.put(Environment.PASS, ""); dbSettings.put(Environment.PASS, "");

View File

@ -2,13 +2,13 @@ package com.baeldung.hibernate.oneToMany.model;
import java.util.Set; import java.util.Set;
import javax.persistence.Column; import jakarta.persistence.Column;
import javax.persistence.Entity; import jakarta.persistence.Entity;
import javax.persistence.GeneratedValue; import jakarta.persistence.GeneratedValue;
import javax.persistence.GenerationType; import jakarta.persistence.GenerationType;
import javax.persistence.Id; import jakarta.persistence.Id;
import javax.persistence.OneToMany; import jakarta.persistence.OneToMany;
import javax.persistence.Table; import jakarta.persistence.Table;
@Entity @Entity
@Table(name = "CART") @Table(name = "CART")

View File

@ -1,13 +1,13 @@
package com.baeldung.hibernate.oneToMany.model; package com.baeldung.hibernate.oneToMany.model;
import java.util.Set; import java.util.Set;
import javax.persistence.Entity; import jakarta.persistence.Entity;
import javax.persistence.GeneratedValue; import jakarta.persistence.GeneratedValue;
import javax.persistence.GenerationType; import jakarta.persistence.GenerationType;
import javax.persistence.Id; import jakarta.persistence.Id;
import javax.persistence.JoinColumn; import jakarta.persistence.JoinColumn;
import javax.persistence.OneToMany; import jakarta.persistence.OneToMany;
import javax.persistence.Table; import jakarta.persistence.Table;
@Entity @Entity
@Table(name = "CARTOIO") @Table(name = "CARTOIO")

View File

@ -1,13 +1,13 @@
package com.baeldung.hibernate.oneToMany.model; package com.baeldung.hibernate.oneToMany.model;
import javax.persistence.Column; import jakarta.persistence.Column;
import javax.persistence.Entity; import jakarta.persistence.Entity;
import javax.persistence.GeneratedValue; import jakarta.persistence.GeneratedValue;
import javax.persistence.GenerationType; import jakarta.persistence.GenerationType;
import javax.persistence.Id; import jakarta.persistence.Id;
import javax.persistence.JoinColumn; import jakarta.persistence.JoinColumn;
import javax.persistence.ManyToOne; import jakarta.persistence.ManyToOne;
import javax.persistence.Table; import jakarta.persistence.Table;
@Entity @Entity
@Table(name = "ITEMS") @Table(name = "ITEMS")

View File

@ -1,12 +1,12 @@
package com.baeldung.hibernate.oneToMany.model; package com.baeldung.hibernate.oneToMany.model;
import javax.persistence.Entity; import jakarta.persistence.Entity;
import javax.persistence.GeneratedValue; import jakarta.persistence.GeneratedValue;
import javax.persistence.GenerationType; import jakarta.persistence.GenerationType;
import javax.persistence.Id; import jakarta.persistence.Id;
import javax.persistence.JoinColumn; import jakarta.persistence.JoinColumn;
import javax.persistence.ManyToOne; import jakarta.persistence.ManyToOne;
import javax.persistence.Table; import jakarta.persistence.Table;
@Entity @Entity
@Table(name = "ITEMSOIO") @Table(name = "ITEMSOIO")

View File

@ -1,9 +1,9 @@
package com.baeldung.hibernate.pojo; package com.baeldung.hibernate.pojo;
import javax.persistence.Entity; import jakarta.persistence.Entity;
import javax.persistence.GeneratedValue; import jakarta.persistence.GeneratedValue;
import javax.persistence.GenerationType; import jakarta.persistence.GenerationType;
import javax.persistence.Id; import jakarta.persistence.Id;
import java.io.Serializable; import java.io.Serializable;
@Entity @Entity

View File

@ -3,10 +3,10 @@ package com.baeldung.hibernate.wherejointable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import javax.persistence.Entity; import jakarta.persistence.Entity;
import javax.persistence.GeneratedValue; import jakarta.persistence.GeneratedValue;
import javax.persistence.Id; import jakarta.persistence.Id;
import javax.persistence.ManyToMany; import jakarta.persistence.ManyToMany;
@Entity(name = "e_group") @Entity(name = "e_group")
public class Group { public class Group {

View File

@ -3,12 +3,12 @@ package com.baeldung.hibernate.wherejointable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import javax.persistence.Entity; import jakarta.persistence.Entity;
import javax.persistence.GeneratedValue; import jakarta.persistence.GeneratedValue;
import javax.persistence.Id; import jakarta.persistence.Id;
import javax.persistence.JoinColumn; import jakarta.persistence.JoinColumn;
import javax.persistence.JoinTable; import jakarta.persistence.JoinTable;
import javax.persistence.ManyToMany; import jakarta.persistence.ManyToMany;
import org.hibernate.annotations.WhereJoinTable; import org.hibernate.annotations.WhereJoinTable;

View File

@ -2,11 +2,11 @@ package com.baeldung.hibernate.wherejointable;
import java.io.Serializable; import java.io.Serializable;
import javax.persistence.Column; import jakarta.persistence.Column;
import javax.persistence.Entity; import jakarta.persistence.Entity;
import javax.persistence.EnumType; import jakarta.persistence.EnumType;
import javax.persistence.Enumerated; import jakarta.persistence.Enumerated;
import javax.persistence.Id; import jakarta.persistence.Id;
@Entity(name = "r_user_group") @Entity(name = "r_user_group")
public class UserGroupRelation implements Serializable { public class UserGroupRelation implements Serializable {

View File

@ -7,12 +7,12 @@
<description>Hibernate EntityManager Demo</description> <description>Hibernate EntityManager Demo</description>
<exclude-unlisted-classes>true</exclude-unlisted-classes> <exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties> <properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
<property name="hibernate.hbm2ddl.auto" value="update"/> <property name="hibernate.hbm2ddl.auto" value="update"/>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/> <property name="jakarta.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://127.0.0.1:3306/moviecatalog"/> <property name="jakarta.persistence.jdbc.url" value="jdbc:mysql://127.0.0.1:3306/moviecatalog"/>
<property name="javax.persistence.jdbc.user" value="root"/> <property name="jakarta.persistence.jdbc.user" value="root"/>
<property name="javax.persistence.jdbc.password" value="root"/> <property name="jakarta.persistence.jdbc.password" value="root"/>
</properties> </properties>
</persistence-unit> </persistence-unit>
</persistence> </persistence>

View File

@ -1,5 +1,6 @@
package com.baeldung.hibernate.creationupdatetimestamp; package com.baeldung.hibernate.creationupdatetimestamp;
import static org.hibernate.FlushMode.MANUAL;
import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertNotEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNotNull;
@ -71,22 +72,22 @@ class HibernateCreationUpdateTimestampIntegrationTest {
} }
@Test @Test
void whenCreatingEntity_ThenCreatedOnAndLastUpdatedOnAreNotEqual() { void whenCreatingEntity_ThenCreatedOnAndLastUpdatedOnAreEqual() {
session = sessionFactory.openSession(); session = sessionFactory.openSession();
session.beginTransaction(); session.beginTransaction();
Book book = new Book(); Book book = new Book();
session.save(book); session.save(book);
session.getTransaction() session.getTransaction().commit();
.commit();
session.close(); session.close();
assertNotEquals(book.getCreatedOn(), book.getLastUpdatedOn()); assertEquals(book.getCreatedOn(), book.getLastUpdatedOn());
} }
@Test @Test
void whenUpdatingEntity_ThenLastUpdatedOnIsUpdatedAndCreatedOnStaysTheSame() { void whenUpdatingEntity_ThenLastUpdatedOnIsUpdatedAndCreatedOnStaysTheSame() {
session = sessionFactory.openSession(); session = sessionFactory.openSession();
session.setHibernateFlushMode(MANUAL);
session.beginTransaction(); session.beginTransaction();
Book book = new Book(); Book book = new Book();
session.save(book); session.save(book);
@ -96,8 +97,9 @@ class HibernateCreationUpdateTimestampIntegrationTest {
String newName = "newName"; String newName = "newName";
book.setTitle(newName); book.setTitle(newName);
session.getTransaction() session.save(book);
.commit(); session.flush();
session.getTransaction().commit();
session.close(); session.close();
Instant createdOnAfterUpdate = book.getCreatedOn(); Instant createdOnAfterUpdate = book.getCreatedOn();
Instant lastUpdatedOnAfterUpdate = book.getLastUpdatedOn(); Instant lastUpdatedOnAfterUpdate = book.getLastUpdatedOn();

View File

@ -6,10 +6,9 @@ import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Environment; import org.hibernate.cfg.Environment;
import org.hibernate.service.ServiceRegistry; import org.hibernate.service.ServiceRegistry;
import org.junit.Assert;
import org.junit.Test; import org.junit.Test;
import javax.persistence.TypedQuery; import jakarta.persistence.TypedQuery;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
@ -76,7 +75,7 @@ public class HibernateCustomTypesIntegrationTest {
doInHibernate(this::sessionFactory, session -> { doInHibernate(this::sessionFactory, session -> {
session.save(e); session.save(e);
TypedQuery<OfficeEmployee> query = session.createQuery("FROM OfficeEmployee OE WHERE OE.empAddress.zipcode = :pinCode", OfficeEmployee.class); TypedQuery<OfficeEmployee> query = session.createQuery("FROM OfficeEmployee OE WHERE OE.empAddress.zipCode = :pinCode", OfficeEmployee.class);
query.setParameter("pinCode",100); query.setParameter("pinCode",100);
int size = query.getResultList().size(); int size = query.getResultList().size();
@ -100,8 +99,8 @@ public class HibernateCustomTypesIntegrationTest {
return metadata.buildSessionFactory(); return metadata.buildSessionFactory();
} }
private static Map<String, String> getProperties() { private static Map<String, Object> getProperties() {
Map<String, String> dbSettings = new HashMap<>(); Map<String, Object> dbSettings = new HashMap<>();
dbSettings.put(Environment.URL, "jdbc:h2:mem:mydb1;DB_CLOSE_DELAY=-1"); dbSettings.put(Environment.URL, "jdbc:h2:mem:mydb1;DB_CLOSE_DELAY=-1");
dbSettings.put(Environment.USER, "sa"); dbSettings.put(Environment.USER, "sa");
dbSettings.put(Environment.PASS, ""); dbSettings.put(Environment.PASS, "");

View File

@ -8,7 +8,7 @@ import org.hibernate.Session;
import org.junit.*; import org.junit.*;
import org.junit.rules.ExpectedException; import org.junit.rules.ExpectedException;
import javax.persistence.PersistenceException; import jakarta.persistence.PersistenceException;
import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.IsEqual.equalTo; import static org.hamcrest.core.IsEqual.equalTo;

View File

@ -78,8 +78,8 @@ public class JoinColumnIntegrationTest {
return metadata.buildSessionFactory(); return metadata.buildSessionFactory();
} }
private static Map<String, String> getProperties() { private static Map<String, Object> getProperties() {
Map<String, String> dbSettings = new HashMap<>(); Map<String, Object> dbSettings = new HashMap<>();
dbSettings.put(Environment.URL, "jdbc:h2:mem:mydbJoinColumn;DB_CLOSE_DELAY=-1"); dbSettings.put(Environment.URL, "jdbc:h2:mem:mydbJoinColumn;DB_CLOSE_DELAY=-1");
dbSettings.put(Environment.USER, "sa"); dbSettings.put(Environment.USER, "sa");
dbSettings.put(Environment.PASS, ""); dbSettings.put(Environment.PASS, "");

View File

@ -78,10 +78,11 @@
</repositories> </repositories>
<properties> <properties>
<hibernate.version>5.3.7.Final</hibernate.version> <hibernate.version>6.1.7.Final</hibernate.version>
<mysql.version>6.0.6</mysql.version> <mysql.version>8.0.32</mysql.version>
<mariaDB4j.version>2.2.3</mariaDB4j.version> <mariaDB4j.version>2.6.0</mariaDB4j.version>
<geodb.version>0.9</geodb.version> <geodb.version>0.9</geodb.version>
<byte-buddy.version>1.14.2</byte-buddy.version>
</properties> </properties>
</project> </project>

View File

@ -1,6 +1,6 @@
package com.baeldung.hibernate.exception; package com.baeldung.hibernate.exception;
import javax.persistence.Entity; import jakarta.persistence.Entity;
@Entity @Entity
public class EntityWithNoId { public class EntityWithNoId {

View File

@ -1,9 +1,9 @@
package com.baeldung.hibernate.exception; package com.baeldung.hibernate.exception;
import javax.persistence.Column; import jakarta.persistence.Column;
import javax.persistence.Entity; import jakarta.persistence.Entity;
import javax.persistence.Id; import jakarta.persistence.Id;
import javax.persistence.Table; import jakarta.persistence.Table;
@Entity @Entity
@Table(name = "PRODUCT") @Table(name = "PRODUCT")

View File

@ -1,8 +1,8 @@
package com.baeldung.hibernate.exception; package com.baeldung.hibernate.exception;
import javax.persistence.Entity; import jakarta.persistence.Entity;
import javax.persistence.Id; import jakarta.persistence.Id;
import javax.persistence.Table; import jakarta.persistence.Table;
@Entity @Entity
@Table(name = "PRODUCT") @Table(name = "PRODUCT")

View File

@ -0,0 +1,32 @@
package com.baeldung.hibernate.exception;
public class ProductNotMapped {
private int id;
private String name;
private String description;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}

View File

@ -1,9 +1,9 @@
package com.baeldung.hibernate.logging; package com.baeldung.hibernate.logging;
import javax.persistence.Entity; import jakarta.persistence.Entity;
import javax.persistence.GeneratedValue; import jakarta.persistence.GeneratedValue;
import javax.persistence.GenerationType; import jakarta.persistence.GenerationType;
import javax.persistence.Id; import jakarta.persistence.Id;
@Entity @Entity
public class Employee { public class Employee {

View File

@ -1,11 +1,11 @@
package com.baeldung.hibernate.pojo; package com.baeldung.hibernate.pojo;
import com.vividsolutions.jts.geom.Point; import org.locationtech.jts.geom.Point;
import javax.persistence.Column; import jakarta.persistence.Column;
import javax.persistence.Entity; import jakarta.persistence.Entity;
import javax.persistence.GeneratedValue; import jakarta.persistence.GeneratedValue;
import javax.persistence.Id; import jakarta.persistence.Id;
@Entity @Entity
public class PointEntity { public class PointEntity {

View File

@ -1,10 +1,10 @@
package com.baeldung.hibernate.pojo; package com.baeldung.hibernate.pojo;
import com.vividsolutions.jts.geom.Polygon; import org.locationtech.jts.geom.Polygon;
import javax.persistence.Entity; import jakarta.persistence.Entity;
import javax.persistence.GeneratedValue; import jakarta.persistence.GeneratedValue;
import javax.persistence.Id; import jakarta.persistence.Id;
@Entity @Entity
public class PolygonEntity { public class PolygonEntity {

View File

@ -1,9 +1,9 @@
package com.baeldung.hibernate.pojo; package com.baeldung.hibernate.pojo;
import javax.persistence.Entity; import jakarta.persistence.Entity;
import javax.persistence.GeneratedValue; import jakarta.persistence.GeneratedValue;
import javax.persistence.GenerationType; import jakarta.persistence.GenerationType;
import javax.persistence.Id; import jakarta.persistence.Id;
@Entity @Entity
public class Student { public class Student {

View File

@ -1,8 +1,8 @@
package com.baeldung.persistence.model; package com.baeldung.persistence.model;
import javax.persistence.Entity; import jakarta.persistence.Entity;
import javax.persistence.GeneratedValue; import jakarta.persistence.GeneratedValue;
import javax.persistence.Id; import jakarta.persistence.Id;
@Entity @Entity
public class Person { public class Person {

View File

@ -7,12 +7,12 @@
<description>Hibernate EntityManager Demo</description> <description>Hibernate EntityManager Demo</description>
<exclude-unlisted-classes>true</exclude-unlisted-classes> <exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties> <properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
<property name="hibernate.hbm2ddl.auto" value="update"/> <property name="hibernate.hbm2ddl.auto" value="update"/>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/> <property name="jakarta.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://127.0.0.1:3306/moviecatalog"/> <property name="jakarta.persistence.jdbc.url" value="jdbc:mysql://127.0.0.1:3306/moviecatalog"/>
<property name="javax.persistence.jdbc.user" value="root"/> <property name="jakarta.persistence.jdbc.user" value="root"/>
<property name="javax.persistence.jdbc.password" value="root"/> <property name="jakarta.persistence.jdbc.password" value="root"/>
</properties> </properties>
</persistence-unit> </persistence-unit>
</persistence> </persistence>

View File

@ -9,23 +9,23 @@ import java.io.IOException;
import java.net.URL; import java.net.URL;
import java.util.Properties; import java.util.Properties;
import javax.persistence.Query; import jakarta.persistence.Query;
import org.hibernate.Session; import org.hibernate.Session;
import org.hibernate.Transaction; import org.hibernate.Transaction;
import org.junit.After; import org.junit.After;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.locationtech.jts.geom.Coordinate;
import org.locationtech.jts.io.ParseException;
import org.locationtech.jts.io.WKTReader;
import org.locationtech.jts.geom.Geometry;
import org.locationtech.jts.geom.Point;
import org.locationtech.jts.geom.Polygon;
import org.locationtech.jts.util.GeometricShapeFactory;
import com.baeldung.hibernate.pojo.PointEntity; import com.baeldung.hibernate.pojo.PointEntity;
import com.baeldung.hibernate.pojo.PolygonEntity; import com.baeldung.hibernate.pojo.PolygonEntity;
import com.vividsolutions.jts.geom.Coordinate;
import com.vividsolutions.jts.geom.Geometry;
import com.vividsolutions.jts.geom.Point;
import com.vividsolutions.jts.geom.Polygon;
import com.vividsolutions.jts.io.ParseException;
import com.vividsolutions.jts.io.WKTReader;
import com.vividsolutions.jts.util.GeometricShapeFactory;
import geodb.GeoDB; import geodb.GeoDB;
@ -39,7 +39,7 @@ public class HibernateSpatialIntegrationTest {
session = HibernateUtil.getSessionFactory("hibernate-spatial.properties") session = HibernateUtil.getSessionFactory("hibernate-spatial.properties")
.openSession(); .openSession();
transaction = session.beginTransaction(); transaction = session.beginTransaction();
session.doWork(conn -> { GeoDB.InitGeoDB(conn); }); session.doWork(GeoDB::InitGeoDB);
} }
@After @After
@ -135,9 +135,7 @@ public class HibernateSpatialIntegrationTest {
private Geometry wktToGeometry(String wellKnownText) throws ParseException { private Geometry wktToGeometry(String wellKnownText) throws ParseException {
WKTReader fromText = new WKTReader(); WKTReader fromText = new WKTReader();
Geometry geom = null; return fromText.read(wellKnownText);
geom = fromText.read(wellKnownText);
return geom;
} }
private static Geometry createCircle(double x, double y, double radius) { private static Geometry createCircle(double x, double y, double radius) {

View File

@ -6,28 +6,25 @@ import static org.junit.Assert.assertNotNull;
import java.io.IOException; import java.io.IOException;
import java.util.List; import java.util.List;
import javax.persistence.OptimisticLockException; import jakarta.persistence.OptimisticLockException;
import javax.persistence.PersistenceException; import jakarta.persistence.PersistenceException;
import org.hibernate.AnnotationException;
import org.hibernate.HibernateException; import org.hibernate.HibernateException;
import org.hibernate.MappingException; import org.hibernate.MappingException;
import org.hibernate.NonUniqueObjectException; import org.hibernate.NonUniqueObjectException;
import org.hibernate.PropertyValueException; import org.hibernate.PropertyValueException;
import org.hibernate.Session; import org.hibernate.Session;
import org.hibernate.SessionFactory; import org.hibernate.SessionFactory;
import org.hibernate.StaleObjectStateException;
import org.hibernate.StaleStateException; import org.hibernate.StaleStateException;
import org.hibernate.Transaction; import org.hibernate.Transaction;
import org.hibernate.TransactionException;
import org.hibernate.cfg.AvailableSettings; import org.hibernate.cfg.AvailableSettings;
import org.hibernate.cfg.Configuration; import org.hibernate.cfg.Configuration;
import org.hibernate.exception.ConstraintViolationException; import org.hibernate.exception.ConstraintViolationException;
import org.hibernate.exception.DataException; import org.hibernate.exception.DataException;
import org.hibernate.exception.SQLGrammarException; import org.hibernate.exception.SQLGrammarException;
import org.hibernate.hql.internal.ast.QuerySyntaxException;
import org.hibernate.id.IdentifierGenerationException; import org.hibernate.id.IdentifierGenerationException;
import org.hibernate.query.NativeQuery; import org.hibernate.query.NativeQuery;
import org.hibernate.query.sqm.UnknownEntityException;
import org.hibernate.tool.schema.spi.CommandAcceptanceException; import org.hibernate.tool.schema.spi.CommandAcceptanceException;
import org.hibernate.tool.schema.spi.SchemaManagementException; import org.hibernate.tool.schema.spi.SchemaManagementException;
import org.junit.Before; import org.junit.Before;
@ -63,12 +60,15 @@ public class HibernateExceptionUnitTest {
@Test @Test
public void whenQueryExecutedWithUnmappedEntity_thenMappingException() { public void whenQueryExecutedWithUnmappedEntity_thenMappingException() {
thrown.expectCause(isA(MappingException.class)); thrown.expect(isA(MappingException.class));
thrown.expectMessage("Unknown entity: java.lang.String"); thrown.expectMessage("Unable to locate persister: com.baeldung.hibernate.exception.ProductNotMapped");
ProductNotMapped product = new ProductNotMapped();
product.setId(1);
product.setName("test");
Session session = sessionFactory.openSession(); Session session = sessionFactory.openSession();
NativeQuery<String> query = session.createNativeQuery("select name from PRODUCT", String.class); session.save(product);
query.getResultList();
} }
@Test @Test
@ -82,8 +82,8 @@ public class HibernateExceptionUnitTest {
@Test @Test
public void whenQueryExecutedWithInvalidClassName_thenQuerySyntaxException() { public void whenQueryExecutedWithInvalidClassName_thenQuerySyntaxException() {
thrown.expectCause(isA(QuerySyntaxException.class)); thrown.expectCause(isA(UnknownEntityException.class));
thrown.expectMessage("PRODUCT is not mapped [from PRODUCT]"); thrown.expectMessage("Could not resolve root entity 'PRODUCT");
Session session = sessionFactory.openSession(); Session session = sessionFactory.openSession();
List<Product> results = session.createQuery("from PRODUCT", Product.class) List<Product> results = session.createQuery("from PRODUCT", Product.class)
@ -92,8 +92,8 @@ public class HibernateExceptionUnitTest {
@Test @Test
public void givenEntityWithoutId_whenSessionFactoryCreated_thenAnnotationException() { public void givenEntityWithoutId_whenSessionFactoryCreated_thenAnnotationException() {
thrown.expect(AnnotationException.class); thrown.expect(isA(HibernateException.class));
thrown.expectMessage("No identifier specified for entity"); thrown.expectMessage("Entity 'com.baeldung.hibernate.exception.EntityWithNoId' has no identifier (every '@Entity' class must declare or inherit at least one '@Id' or '@EmbeddedId' property)");
Configuration cfg = getConfiguration(); Configuration cfg = getConfiguration();
cfg.addAnnotatedClass(EntityWithNoId.class); cfg.addAnnotatedClass(EntityWithNoId.class);
@ -132,9 +132,8 @@ public class HibernateExceptionUnitTest {
@Test @Test
public void givenMissingTable_whenEntitySaved_thenSQLGrammarException() { public void givenMissingTable_whenEntitySaved_thenSQLGrammarException() {
thrown.expect(isA(PersistenceException.class));
thrown.expectCause(isA(SQLGrammarException.class)); thrown.expectCause(isA(SQLGrammarException.class));
thrown.expectMessage("SQLGrammarException: could not prepare statement"); thrown.expectMessage("could not prepare statement");
Configuration cfg = getConfiguration(); Configuration cfg = getConfiguration();
cfg.addAnnotatedClass(Product.class); cfg.addAnnotatedClass(Product.class);
@ -162,9 +161,8 @@ public class HibernateExceptionUnitTest {
@Test @Test
public void givenMissingTable_whenQueryExecuted_thenSQLGrammarException() { public void givenMissingTable_whenQueryExecuted_thenSQLGrammarException() {
thrown.expect(isA(PersistenceException.class));
thrown.expectCause(isA(SQLGrammarException.class)); thrown.expectCause(isA(SQLGrammarException.class));
thrown.expectMessage("SQLGrammarException: could not prepare statement"); thrown.expectMessage("could not prepare statement");
Session session = sessionFactory.openSession(); Session session = sessionFactory.openSession();
NativeQuery<Product> query = session.createNativeQuery("select * from NON_EXISTING_TABLE", Product.class); NativeQuery<Product> query = session.createNativeQuery("select * from NON_EXISTING_TABLE", Product.class);
@ -173,9 +171,8 @@ public class HibernateExceptionUnitTest {
@Test @Test
public void whenDuplicateIdSaved_thenConstraintViolationException() { public void whenDuplicateIdSaved_thenConstraintViolationException() {
thrown.expect(isA(PersistenceException.class));
thrown.expectCause(isA(ConstraintViolationException.class)); thrown.expectCause(isA(ConstraintViolationException.class));
thrown.expectMessage("ConstraintViolationException: could not execute statement"); thrown.expectMessage("could not execute statement");
Session session = null; Session session = null;
Transaction transaction = null; Transaction transaction = null;
@ -253,7 +250,7 @@ public class HibernateExceptionUnitTest {
@Test @Test
public void givenQueryWithDataTypeMismatch_WhenQueryExecuted_thenDataException() { public void givenQueryWithDataTypeMismatch_WhenQueryExecuted_thenDataException() {
thrown.expectCause(isA(DataException.class)); thrown.expectCause(isA(DataException.class));
thrown.expectMessage("org.hibernate.exception.DataException: could not prepare statement"); thrown.expectMessage("could not prepare statement");
Session session = sessionFactory.openSession(); Session session = sessionFactory.openSession();
NativeQuery<Product> query = session.createNativeQuery("select * from PRODUCT where id='wrongTypeId'", Product.class); NativeQuery<Product> query = session.createNativeQuery("select * from PRODUCT where id='wrongTypeId'", Product.class);
@ -330,9 +327,8 @@ public class HibernateExceptionUnitTest {
@Test @Test
public void whenUpdatingNonExistingObject_thenStaleStateException() { public void whenUpdatingNonExistingObject_thenStaleStateException() {
thrown.expect(isA(OptimisticLockException.class)); thrown.expectCause(isA(StaleStateException.class));
thrown.expectMessage("Row was updated or deleted by another transaction"); thrown.expectMessage("Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1; statement executed: update PRODUCT set description=?, name=? where id=?");
thrown.expectCause(isA(StaleObjectStateException.class));
Session session = null; Session session = null;
Transaction transaction = null; Transaction transaction = null;
@ -356,7 +352,8 @@ public class HibernateExceptionUnitTest {
@Test @Test
public void givenTxnMarkedRollbackOnly_whenCommitted_thenTransactionException() { public void givenTxnMarkedRollbackOnly_whenCommitted_thenTransactionException() {
thrown.expect(isA(TransactionException.class)); thrown.expect(isA(IllegalStateException.class));
thrown.expectMessage("Transaction already active");
Session session = null; Session session = null;
Transaction transaction = null; Transaction transaction = null;
@ -368,6 +365,7 @@ public class HibernateExceptionUnitTest {
product1.setId(15); product1.setId(15);
product1.setName("Product1"); product1.setName("Product1");
session.save(product1); session.save(product1);
transaction = session.beginTransaction();
transaction.setRollbackOnly(); transaction.setRollbackOnly();
transaction.commit(); transaction.commit();

View File

@ -2,9 +2,9 @@ package com.baeldung.hibernate.multitenancy;
import java.io.Serializable; import java.io.Serializable;
import javax.persistence.Entity; import jakarta.persistence.Entity;
import javax.persistence.Id; import jakarta.persistence.Id;
import javax.persistence.Table; import jakarta.persistence.Table;
@Entity(name = "Car") @Entity(name = "Car")
@Table(name = "Car") @Table(name = "Car")

View File

@ -79,9 +79,9 @@ public abstract class MultitenancyIntegrationTest {
private void createCarTable() { private void createCarTable() {
Session session = sessionFactory.openSession(); Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction(); Transaction tx = session.beginTransaction();
session.createSQLQuery("drop table Car if exists") session.createNativeQuery("drop table Car if exists")
.executeUpdate(); .executeUpdate();
session.createSQLQuery("create table Car (brand varchar(255) primary key)") session.createNativeQuery("create table Car (brand varchar(255) primary key)")
.executeUpdate(); .executeUpdate();
tx.commit(); tx.commit();
} }

View File

@ -1,7 +1,5 @@
package com.baeldung.hibernate.multitenancy.database; package com.baeldung.hibernate.multitenancy.database;
import java.io.IOException;
import org.junit.Test; import org.junit.Test;
import com.baeldung.hibernate.multitenancy.MultitenancyIntegrationTest; import com.baeldung.hibernate.multitenancy.MultitenancyIntegrationTest;
@ -14,7 +12,7 @@ public class DatabaseApproachMultitenancyIntegrationTest extends MultitenancyInt
} }
@Test @Test
public void givenDatabaseApproach_whenAddingEntries_thenOnlyAddedToConcreteDatabase() throws IOException { public void givenDatabaseApproach_whenAddingEntries_thenOnlyAddedToConcreteDatabase() {
whenCurrentTenantIs(TenantIdNames.MYDB1); whenCurrentTenantIs(TenantIdNames.MYDB1);
whenAddCar("myCar"); whenAddCar("myCar");
thenCarFound("myCar"); thenCarFound("myCar");

View File

@ -34,8 +34,13 @@ public class MapMultiTenantConnectionProvider extends AbstractMultiTenantConnect
private void initConnectionProviderForTenant(String tenantId) throws IOException { private void initConnectionProviderForTenant(String tenantId) throws IOException {
Properties properties = new Properties(); Properties properties = new Properties();
properties.load(getClass().getResourceAsStream(String.format("/hibernate-database-%s.properties", tenantId))); properties.load(getClass().getResourceAsStream(String.format("/hibernate-database-%s.properties", tenantId)));
Map<String, Object> configProperties = new HashMap<>();
for (String key : properties.stringPropertyNames()) {
String value = properties.getProperty(key);
configProperties.put(key, value);
}
DriverManagerConnectionProviderImpl connectionProvider = new DriverManagerConnectionProviderImpl(); DriverManagerConnectionProviderImpl connectionProvider = new DriverManagerConnectionProviderImpl();
connectionProvider.configure(properties); connectionProvider.configure(configProperties);
this.connectionProviderMap.put(tenantId, connectionProvider); this.connectionProviderMap.put(tenantId, connectionProvider);
} }

View File

@ -3,6 +3,8 @@ package com.baeldung.hibernate.multitenancy.schema;
import java.io.IOException; import java.io.IOException;
import java.sql.Connection; import java.sql.Connection;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties; import java.util.Properties;
import org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl; import org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl;
@ -39,9 +41,14 @@ public class SchemaMultiTenantConnectionProvider extends AbstractMultiTenantConn
private ConnectionProvider initConnectionProvider() throws IOException { private ConnectionProvider initConnectionProvider() throws IOException {
Properties properties = new Properties(); Properties properties = new Properties();
properties.load(getClass().getResourceAsStream("/hibernate-schema-multitenancy.properties")); properties.load(getClass().getResourceAsStream("/hibernate-schema-multitenancy.properties"));
Map<String, Object> configProperties = new HashMap<>();
for (String key : properties.stringPropertyNames()) {
String value = properties.getProperty(key);
configProperties.put(key, value);
}
DriverManagerConnectionProviderImpl connectionProvider = new DriverManagerConnectionProviderImpl(); DriverManagerConnectionProviderImpl connectionProvider = new DriverManagerConnectionProviderImpl();
connectionProvider.configure(properties); connectionProvider.configure(configProperties);
return connectionProvider; return connectionProvider;
} }

View File

@ -7,7 +7,7 @@ import static org.junit.Assert.assertNotSame;
import static org.junit.Assert.assertNull; import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame; import static org.junit.Assert.assertSame;
import javax.persistence.PersistenceException; import jakarta.persistence.PersistenceException;
import org.hibernate.HibernateException; import org.hibernate.HibernateException;
import org.hibernate.Session; import org.hibernate.Session;

View File

@ -12,5 +12,3 @@ hibernate.c3p0.min_size=5
hibernate.c3p0.max_size=20 hibernate.c3p0.max_size=20
hibernate.c3p0.acquire_increment=5 hibernate.c3p0.acquire_increment=5
hibernate.c3p0.timeout=1800 hibernate.c3p0.timeout=1800
hibernate.transaction.factory_class=org.hibernate.transaction.JTATransactionFactory

View File

@ -4,7 +4,7 @@ hibernate.connection.username=sa
hibernate.connection.autocommit=true hibernate.connection.autocommit=true
jdbc.password= jdbc.password=
hibernate.dialect=org.hibernate.spatial.dialect.h2geodb.GeoDBDialect hibernate.dialect=org.hibernate.dialect.H2Dialect
hibernate.show_sql=true hibernate.show_sql=true
hibernate.hbm2ddl.auto=create-drop hibernate.hbm2ddl.auto=create-drop

View File

@ -26,7 +26,7 @@
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.vladmihalcea</groupId> <groupId>com.vladmihalcea</groupId>
<artifactId>hibernate-types-52</artifactId> <artifactId>hibernate-types-60</artifactId>
<version>${hibernate-types.version}</version> <version>${hibernate-types.version}</version>
</dependency> </dependency>
<dependency> <dependency>
@ -41,9 +41,9 @@
<version>${hibernate-validator.version}</version> <version>${hibernate-validator.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.glassfish</groupId> <groupId>org.glassfish.expressly</groupId>
<artifactId>javax.el</artifactId> <artifactId>expressly</artifactId>
<version>${org.glassfish.javax.el.version}</version> <version>5.0.0</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>javax.money</groupId> <groupId>javax.money</groupId>
@ -66,16 +66,27 @@
<artifactId>commons-io</artifactId> <artifactId>commons-io</artifactId>
<version>${commons-io.version}</version> <version>${commons-io.version}</version>
</dependency> </dependency>
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-jakarta-xmlbind-annotations</artifactId>
<version>${jackson-module-jakarta-xmlbind-annotation}</version>
</dependency>
<dependency>
<groupId>org.openjdk.nashorn</groupId>
<artifactId>nashorn-core</artifactId>
<version>15.4</version>
</dependency>
</dependencies> </dependencies>
<properties> <properties>
<h2.version>1.4.197</h2.version> <!-- needs to be specified as it fails with parent's 1.4.200 --> <h2.version>2.1.214</h2.version> <!-- needs to be specified as it fails with parent's 1.4.200 -->
<hibernate.version>5.4.12.Final</hibernate.version> <hibernate.version>6.1.7.Final</hibernate.version>
<hibernate-types.version>2.10.4</hibernate-types.version> <hibernate-types.version>2.21.1</hibernate-types.version>
<hibernate-validator.version>6.0.16.Final</hibernate-validator.version> <hibernate-validator.version>8.0.0.Final</hibernate-validator.version>
<org.glassfish.javax.el.version>3.0.1-b11</org.glassfish.javax.el.version> <org.glassfish.javax.el.version>3.0.1-b11</org.glassfish.javax.el.version>
<money-api.version>1.0.3</money-api.version> <money-api.version>1.1</money-api.version>
<moneta.version>1.3</moneta.version> <moneta.version>1.4.2</moneta.version>
<jackson-module-jakarta-xmlbind-annotation>2.14.2</jackson-module-jakarta-xmlbind-annotation>
</properties> </properties>
</project> </project>

View File

@ -21,6 +21,7 @@ import com.baeldung.hibernate.pojo.inheritance.Animal;
import com.baeldung.hibernate.pojo.inheritance.Bag; import com.baeldung.hibernate.pojo.inheritance.Bag;
import com.baeldung.hibernate.pojo.inheritance.Book; import com.baeldung.hibernate.pojo.inheritance.Book;
import com.baeldung.hibernate.pojo.inheritance.Car; import com.baeldung.hibernate.pojo.inheritance.Car;
import com.baeldung.hibernate.pojo.inheritance.Laptop;
import com.baeldung.hibernate.pojo.inheritance.MyEmployee; import com.baeldung.hibernate.pojo.inheritance.MyEmployee;
import com.baeldung.hibernate.pojo.inheritance.MyProduct; import com.baeldung.hibernate.pojo.inheritance.MyProduct;
import com.baeldung.hibernate.pojo.inheritance.Pen; import com.baeldung.hibernate.pojo.inheritance.Pen;
@ -79,6 +80,7 @@ public class HibernateUtil {
metadataSources.addAnnotatedClass(com.baeldung.hibernate.entities.Department.class); metadataSources.addAnnotatedClass(com.baeldung.hibernate.entities.Department.class);
metadataSources.addAnnotatedClass(Animal.class); metadataSources.addAnnotatedClass(Animal.class);
metadataSources.addAnnotatedClass(Bag.class); metadataSources.addAnnotatedClass(Bag.class);
metadataSources.addAnnotatedClass(Laptop.class);
metadataSources.addAnnotatedClass(Book.class); metadataSources.addAnnotatedClass(Book.class);
metadataSources.addAnnotatedClass(Car.class); metadataSources.addAnnotatedClass(Car.class);
metadataSources.addAnnotatedClass(MyEmployee.class); metadataSources.addAnnotatedClass(MyEmployee.class);
@ -87,7 +89,6 @@ public class HibernateUtil {
metadataSources.addAnnotatedClass(Pet.class); metadataSources.addAnnotatedClass(Pet.class);
metadataSources.addAnnotatedClass(Vehicle.class); metadataSources.addAnnotatedClass(Vehicle.class);
Metadata metadata = metadataSources.getMetadataBuilder() Metadata metadata = metadataSources.getMetadataBuilder()
.build(); .build();

View File

@ -7,60 +7,57 @@ import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import java.sql.Types; import java.sql.Types;
import java.util.Arrays; import java.util.Arrays;
import java.util.Objects;
import org.hibernate.HibernateException;
import org.hibernate.engine.spi.SharedSessionContractImplementor; import org.hibernate.engine.spi.SharedSessionContractImplementor;
import org.hibernate.usertype.UserType; import org.hibernate.usertype.UserType;
public class CustomIntegerArrayType implements UserType { public class CustomIntegerArrayType implements UserType<Integer[]> {
@Override @Override
public int[] sqlTypes() { public int getSqlType() {
return new int[]{Types.ARRAY}; return Types.ARRAY;
} }
@Override @Override
public Class returnedClass() { public Class<Integer[]> returnedClass() {
return Integer[].class; return Integer[].class;
} }
@Override @Override
public boolean equals(Object x, Object y) throws HibernateException { public boolean equals(Integer[] x, Integer[] y) {
if (x instanceof Integer[] && y instanceof Integer[]) { if (x instanceof Integer[] && y instanceof Integer[]) {
return Arrays.deepEquals((Integer[])x, (Integer[])y); return Arrays.deepEquals(x, y);
} else { } else {
return false; return false;
} }
} }
@Override @Override
public int hashCode(Object x) throws HibernateException { public int hashCode(Integer[] x) {
return Arrays.hashCode((Integer[])x); return Arrays.hashCode(x);
} }
@Override @Override
public Object nullSafeGet(ResultSet rs, String[] names, SharedSessionContractImplementor session, Object owner) public Integer[] nullSafeGet(ResultSet rs, int position, SharedSessionContractImplementor session, Object owner) throws SQLException {
throws HibernateException, SQLException { Array array = rs.getArray(position);
Array array = rs.getArray(names[0]); return array != null ? (Integer[]) array.getArray() : null;
return array != null ? array.getArray() : null;
} }
@Override @Override
public void nullSafeSet(PreparedStatement st, Object value, int index, SharedSessionContractImplementor session) public void nullSafeSet(PreparedStatement st, Integer[] value, int index, SharedSessionContractImplementor session) throws SQLException {
throws HibernateException, SQLException { if (st != null) {
if (value != null && st != null) { if (value != null) {
Array array = session.connection().createArrayOf("int", (Integer[])value); Array array = session.getJdbcConnectionAccess().obtainConnection().createArrayOf("int", value);
st.setArray(index, array); st.setArray(index, array);
} else { } else {
st.setNull(index, sqlTypes()[0]); st.setNull(index, Types.ARRAY);
}
} }
} }
@Override @Override
public Object deepCopy(Object value) throws HibernateException { public Integer[] deepCopy(Integer[] value) {
Integer[] arr = (Integer[]) value; return value != null ? Arrays.copyOf(value, value.length) : null;
return arr != null ? Arrays.copyOf(arr, arr.length) : null;
} }
@Override @Override
@ -69,18 +66,18 @@ public class CustomIntegerArrayType implements UserType {
} }
@Override @Override
public Serializable disassemble(Object value) throws HibernateException { public Serializable disassemble(Integer[] value) {
return (Serializable) value; return value;
} }
@Override @Override
public Object assemble(Serializable cached, Object owner) throws HibernateException { public Integer[] assemble(Serializable cached, Object owner) {
return cached; return (Integer[]) cached;
} }
@Override @Override
public Object replace(Object original, Object target, Object owner) throws HibernateException { public Integer[] replace(Integer[] detached, Integer[] managed, Object owner) {
return original; return detached;
} }
} }

View File

@ -7,60 +7,57 @@ import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import java.sql.Types; import java.sql.Types;
import java.util.Arrays; import java.util.Arrays;
import java.util.Objects;
import org.hibernate.HibernateException;
import org.hibernate.engine.spi.SharedSessionContractImplementor; import org.hibernate.engine.spi.SharedSessionContractImplementor;
import org.hibernate.usertype.UserType; import org.hibernate.usertype.UserType;
public class CustomStringArrayType implements UserType { public class CustomStringArrayType implements UserType<String[]> {
@Override @Override
public int[] sqlTypes() { public int getSqlType() {
return new int[]{Types.ARRAY}; return Types.ARRAY;
} }
@Override @Override
public Class returnedClass() { public Class<String[]> returnedClass() {
return String[].class; return String[].class;
} }
@Override @Override
public boolean equals(Object x, Object y) throws HibernateException { public boolean equals(String[] x, String[] y) {
if (x instanceof String[] && y instanceof String[]) { if (x instanceof String[] && y instanceof String[]) {
return Arrays.deepEquals((String[])x, (String[])y); return Arrays.deepEquals(x, y);
} else { } else {
return false; return false;
} }
} }
@Override @Override
public int hashCode(Object x) throws HibernateException { public int hashCode(String[] x) {
return Arrays.hashCode((String[])x); return Arrays.hashCode(x);
} }
@Override @Override
public Object nullSafeGet(ResultSet rs, String[] names, SharedSessionContractImplementor session, Object owner) public String[] nullSafeGet(ResultSet rs, int position, SharedSessionContractImplementor session, Object owner) throws SQLException {
throws HibernateException, SQLException { Array array = rs.getArray(position);
Array array = rs.getArray(names[0]); return array != null ? (String[]) array.getArray() : null;
return array != null ? array.getArray() : null;
} }
@Override @Override
public void nullSafeSet(PreparedStatement st, Object value, int index, SharedSessionContractImplementor session) public void nullSafeSet(PreparedStatement st, String[] value, int index, SharedSessionContractImplementor session) throws SQLException {
throws HibernateException, SQLException { if (st != null) {
if (value != null && st != null) { if (value != null) {
Array array = session.connection().createArrayOf("text", (String[])value); Array array = session.getJdbcConnectionAccess().obtainConnection().createArrayOf("text", value);
st.setArray(index, array); st.setArray(index, array);
} else { } else {
st.setNull(index, sqlTypes()[0]); st.setNull(index, Types.ARRAY);
}
} }
} }
@Override @Override
public Object deepCopy(Object value) throws HibernateException { public String[] deepCopy(String[] value) {
String[] arr = (String[]) value; return value != null ? Arrays.copyOf(value, value.length) : null;
return arr != null ? Arrays.copyOf(arr, arr.length) : null;
} }
@Override @Override
@ -69,18 +66,18 @@ public class CustomStringArrayType implements UserType {
} }
@Override @Override
public Serializable disassemble(Object value) throws HibernateException { public Serializable disassemble(String[] value) {
return (Serializable) value; return value;
} }
@Override @Override
public Object assemble(Serializable cached, Object owner) throws HibernateException { public String[] assemble(Serializable cached, Object owner) {
return cached; return (String[]) cached;
} }
@Override @Override
public Object replace(Object original, Object target, Object owner) throws HibernateException { public String[] replace(String[] detached, String[] managed, Object owner) {
return original; return detached;
} }
} }

View File

@ -1,21 +1,13 @@
package com.baeldung.hibernate.arraymapping; package com.baeldung.hibernate.arraymapping;
import javax.persistence.Column; import jakarta.persistence.Column;
import javax.persistence.Entity; import jakarta.persistence.Entity;
import javax.persistence.Id; import jakarta.persistence.Id;
import org.hibernate.annotations.Type; import org.hibernate.annotations.Type;
import com.vladmihalcea.hibernate.type.array.StringArrayType; import com.vladmihalcea.hibernate.type.array.StringArrayType;
import org.hibernate.annotations.*;
@TypeDefs({
@TypeDef(
name = "string-array",
typeClass = StringArrayType.class
)
})
@Entity @Entity
public class User { public class User {
@ -25,14 +17,14 @@ public class User {
private String name; private String name;
@Column(columnDefinition = "text[]") @Column(columnDefinition = "text[]")
@Type(type = "com.baeldung.hibernate.arraymapping.CustomStringArrayType") @Type(value = com.baeldung.hibernate.arraymapping.CustomStringArrayType.class)
private String[] roles; private String[] roles;
@Column(columnDefinition = "int[]") @Column(columnDefinition = "int[]")
@Type(type = "com.baeldung.hibernate.arraymapping.CustomIntegerArrayType") @Type(value = com.baeldung.hibernate.arraymapping.CustomIntegerArrayType.class)
private Integer[] locations; private Integer[] locations;
@Type(type = "string-array") @Type(StringArrayType.class)
@Column( @Column(
name = "phone_numbers", name = "phone_numbers",
columnDefinition = "text[]" columnDefinition = "text[]"

View File

@ -1,10 +1,9 @@
package com.baeldung.hibernate.basicannotation; package com.baeldung.hibernate.basicannotation;
import javax.persistence.Basic; import jakarta.persistence.Basic;
import javax.persistence.Entity; import jakarta.persistence.Entity;
import javax.persistence.FetchType; import jakarta.persistence.FetchType;
import javax.persistence.GeneratedValue; import jakarta.persistence.Id;
import javax.persistence.Id;
@Entity @Entity
public class Course { public class Course {

View File

@ -2,7 +2,7 @@ package com.baeldung.hibernate.entities;
import java.util.List; import java.util.List;
import javax.persistence.*; import jakarta.persistence.*;
@Entity @Entity
public class Department { public class Department {

View File

@ -1,13 +1,13 @@
package com.baeldung.hibernate.entities; package com.baeldung.hibernate.entities;
import javax.persistence.Entity; import jakarta.persistence.Entity;
import javax.persistence.GeneratedValue; import jakarta.persistence.GeneratedValue;
import javax.persistence.GenerationType; import jakarta.persistence.GenerationType;
import javax.persistence.Id; import jakarta.persistence.Id;
import javax.persistence.ManyToOne; import jakarta.persistence.ManyToOne;
@org.hibernate.annotations.NamedQueries({ @org.hibernate.annotations.NamedQuery(name = "DeptEmployee_FindByEmployeeNumber", query = "from DeptEmployee where employeeNumber = :employeeNo"), @org.hibernate.annotations.NamedQueries({ @org.hibernate.annotations.NamedQuery(name = "DeptEmployee_FindByEmployeeNumber", query = "from DeptEmployee where employeeNumber = :employeeNo"),
@org.hibernate.annotations.NamedQuery(name = "DeptEmployee_FindAllByDesgination", query = "from DeptEmployee where designation = :designation"), @org.hibernate.annotations.NamedQuery(name = "DeptEmployee_FindAllByDesgination", query = "from DeptEmployee where employeeNumber = :designation"),
@org.hibernate.annotations.NamedQuery(name = "DeptEmployee_UpdateEmployeeDepartment", query = "Update DeptEmployee set department = :newDepartment where employeeNumber = :employeeNo"), @org.hibernate.annotations.NamedQuery(name = "DeptEmployee_UpdateEmployeeDepartment", query = "Update DeptEmployee set department = :newDepartment where employeeNumber = :employeeNo"),
@org.hibernate.annotations.NamedQuery(name = "DeptEmployee_FindAllByDepartment", query = "from DeptEmployee where department = :department", timeout = 1, fetchSize = 10) }) @org.hibernate.annotations.NamedQuery(name = "DeptEmployee_FindAllByDepartment", query = "from DeptEmployee where department = :department", timeout = 1, fetchSize = 10) })
@org.hibernate.annotations.NamedNativeQueries({ @org.hibernate.annotations.NamedNativeQuery(name = "DeptEmployee_FindByEmployeeName", query = "select * from deptemployee emp where name=:name", resultClass = DeptEmployee.class), @org.hibernate.annotations.NamedNativeQueries({ @org.hibernate.annotations.NamedNativeQuery(name = "DeptEmployee_FindByEmployeeName", query = "select * from deptemployee emp where name=:name", resultClass = DeptEmployee.class),

View File

@ -3,10 +3,10 @@ package com.baeldung.hibernate.fetchMode;
import org.hibernate.annotations.Fetch; import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode; import org.hibernate.annotations.FetchMode;
import javax.persistence.Entity; import jakarta.persistence.Entity;
import javax.persistence.GeneratedValue; import jakarta.persistence.GeneratedValue;
import javax.persistence.Id; import jakarta.persistence.Id;
import javax.persistence.OneToMany; import jakarta.persistence.OneToMany;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;

View File

@ -1,6 +1,6 @@
package com.baeldung.hibernate.fetchMode; package com.baeldung.hibernate.fetchMode;
import javax.persistence.*; import jakarta.persistence.*;
@Entity @Entity
public class Order { public class Order {

View File

@ -1,13 +1,13 @@
package com.baeldung.hibernate.lob.model; package com.baeldung.hibernate.lob.model;
import javax.persistence.Column; import jakarta.persistence.Column;
import javax.persistence.Entity; import jakarta.persistence.Entity;
import javax.persistence.Id; import jakarta.persistence.Id;
import javax.persistence.Lob; import jakarta.persistence.Lob;
import javax.persistence.Table; import jakarta.persistence.Table;
@Entity @Entity
@Table(name="user") @Table(name="users")
public class User { public class User {
@Id @Id

View File

@ -2,15 +2,15 @@ package com.baeldung.hibernate.persistmaps.mapkey;
import com.baeldung.hibernate.persistmaps.ItemType; import com.baeldung.hibernate.persistmaps.ItemType;
import javax.persistence.Column; import jakarta.persistence.Column;
import javax.persistence.Entity; import jakarta.persistence.Entity;
import javax.persistence.EnumType; import jakarta.persistence.EnumType;
import javax.persistence.Enumerated; import jakarta.persistence.Enumerated;
import javax.persistence.GeneratedValue; import jakarta.persistence.GeneratedValue;
import javax.persistence.Id; import jakarta.persistence.Id;
import javax.persistence.Table; import jakarta.persistence.Table;
import javax.persistence.Temporal; import jakarta.persistence.Temporal;
import javax.persistence.TemporalType; import jakarta.persistence.TemporalType;
import java.util.Date; import java.util.Date;
import java.util.Objects; import java.util.Objects;

View File

@ -1,15 +1,15 @@
package com.baeldung.hibernate.persistmaps.mapkey; package com.baeldung.hibernate.persistmaps.mapkey;
import javax.persistence.CascadeType; import jakarta.persistence.CascadeType;
import javax.persistence.Column; import jakarta.persistence.Column;
import javax.persistence.Entity; import jakarta.persistence.Entity;
import javax.persistence.GeneratedValue; import jakarta.persistence.GeneratedValue;
import javax.persistence.Id; import jakarta.persistence.Id;
import javax.persistence.JoinColumn; import jakarta.persistence.JoinColumn;
import javax.persistence.JoinTable; import jakarta.persistence.JoinTable;
import javax.persistence.MapKey; import jakarta.persistence.MapKey;
import javax.persistence.OneToMany; import jakarta.persistence.OneToMany;
import javax.persistence.Table; import jakarta.persistence.Table;
import java.util.Map; import java.util.Map;
@Entity @Entity

View File

@ -1,16 +1,15 @@
package com.baeldung.hibernate.persistmaps.mapkey; package com.baeldung.hibernate.persistmaps.mapkey;
import javax.persistence.Column; import jakarta.persistence.Column;
import javax.persistence.Entity; import jakarta.persistence.Entity;
import javax.persistence.Id; import jakarta.persistence.Id;
import javax.validation.constraints.Size; import jakarta.persistence.Table;
import javax.money.MonetaryAmount; import jakarta.validation.constraints.Size;
import org.hibernate.validator.constraints.Length; import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.CreditCardNumber;
import org.hibernate.validator.constraints.Currency;
@Entity @Entity
@Table(name="users2")
public class User { public class User {
@Id @Id
@Column(length = 3) @Column(length = 3)

View File

@ -1,14 +1,14 @@
package com.baeldung.hibernate.persistmaps.mapkeycolumn; package com.baeldung.hibernate.persistmaps.mapkeycolumn;
import javax.persistence.CollectionTable; import jakarta.persistence.CollectionTable;
import javax.persistence.Column; import jakarta.persistence.Column;
import javax.persistence.ElementCollection; import jakarta.persistence.ElementCollection;
import javax.persistence.Entity; import jakarta.persistence.Entity;
import javax.persistence.GeneratedValue; import jakarta.persistence.GeneratedValue;
import javax.persistence.Id; import jakarta.persistence.Id;
import javax.persistence.JoinColumn; import jakarta.persistence.JoinColumn;
import javax.persistence.MapKeyColumn; import jakarta.persistence.MapKeyColumn;
import javax.persistence.Table; import jakarta.persistence.Table;
import java.util.Map; import java.util.Map;
@Entity @Entity

View File

@ -3,17 +3,17 @@ package com.baeldung.hibernate.persistmaps.mapkeyenumerated;
import com.baeldung.hibernate.persistmaps.ItemType; import com.baeldung.hibernate.persistmaps.ItemType;
import com.baeldung.hibernate.persistmaps.mapkey.Item; import com.baeldung.hibernate.persistmaps.mapkey.Item;
import javax.persistence.CascadeType; import jakarta.persistence.CascadeType;
import javax.persistence.Column; import jakarta.persistence.Column;
import javax.persistence.Entity; import jakarta.persistence.Entity;
import javax.persistence.EnumType; import jakarta.persistence.EnumType;
import javax.persistence.GeneratedValue; import jakarta.persistence.GeneratedValue;
import javax.persistence.Id; import jakarta.persistence.Id;
import javax.persistence.JoinColumn; import jakarta.persistence.JoinColumn;
import javax.persistence.JoinTable; import jakarta.persistence.JoinTable;
import javax.persistence.MapKeyEnumerated; import jakarta.persistence.MapKeyEnumerated;
import javax.persistence.OneToMany; import jakarta.persistence.OneToMany;
import javax.persistence.Table; import jakarta.persistence.Table;
import java.util.Map; import java.util.Map;
@Entity @Entity

View File

@ -2,18 +2,18 @@ package com.baeldung.hibernate.persistmaps.mapkeyjoincolumn;
import com.baeldung.hibernate.persistmaps.ItemType; import com.baeldung.hibernate.persistmaps.ItemType;
import javax.persistence.CascadeType; import jakarta.persistence.CascadeType;
import javax.persistence.Column; import jakarta.persistence.Column;
import javax.persistence.Entity; import jakarta.persistence.Entity;
import javax.persistence.EnumType; import jakarta.persistence.EnumType;
import javax.persistence.Enumerated; import jakarta.persistence.Enumerated;
import javax.persistence.GeneratedValue; import jakarta.persistence.GeneratedValue;
import javax.persistence.Id; import jakarta.persistence.Id;
import javax.persistence.JoinColumn; import jakarta.persistence.JoinColumn;
import javax.persistence.ManyToOne; import jakarta.persistence.ManyToOne;
import javax.persistence.Table; import jakarta.persistence.Table;
import javax.persistence.Temporal; import jakarta.persistence.Temporal;
import javax.persistence.TemporalType; import jakarta.persistence.TemporalType;
import java.util.Date; import java.util.Date;
import java.util.Objects; import java.util.Objects;

View File

@ -1,15 +1,15 @@
package com.baeldung.hibernate.persistmaps.mapkeyjoincolumn; package com.baeldung.hibernate.persistmaps.mapkeyjoincolumn;
import javax.persistence.CascadeType; import jakarta.persistence.CascadeType;
import javax.persistence.Column; import jakarta.persistence.Column;
import javax.persistence.Entity; import jakarta.persistence.Entity;
import javax.persistence.GeneratedValue; import jakarta.persistence.GeneratedValue;
import javax.persistence.Id; import jakarta.persistence.Id;
import javax.persistence.JoinColumn; import jakarta.persistence.JoinColumn;
import javax.persistence.JoinTable; import jakarta.persistence.JoinTable;
import javax.persistence.MapKeyJoinColumn; import jakarta.persistence.MapKeyJoinColumn;
import javax.persistence.OneToMany; import jakarta.persistence.OneToMany;
import javax.persistence.Table; import jakarta.persistence.Table;
import java.util.Map; import java.util.Map;
@Entity @Entity

View File

@ -1,10 +1,10 @@
package com.baeldung.hibernate.persistmaps.mapkeyjoincolumn; package com.baeldung.hibernate.persistmaps.mapkeyjoincolumn;
import javax.persistence.Column; import jakarta.persistence.Column;
import javax.persistence.Entity; import jakarta.persistence.Entity;
import javax.persistence.GeneratedValue; import jakarta.persistence.GeneratedValue;
import javax.persistence.Id; import jakarta.persistence.Id;
import javax.persistence.Table; import jakarta.persistence.Table;
import java.util.Objects; import java.util.Objects;
@Entity @Entity

View File

@ -2,17 +2,17 @@ package com.baeldung.hibernate.persistmaps.mapkeytemporal;
import com.baeldung.hibernate.persistmaps.mapkey.Item; import com.baeldung.hibernate.persistmaps.mapkey.Item;
import javax.persistence.CascadeType; import jakarta.persistence.CascadeType;
import javax.persistence.Column; import jakarta.persistence.Column;
import javax.persistence.Entity; import jakarta.persistence.Entity;
import javax.persistence.GeneratedValue; import jakarta.persistence.GeneratedValue;
import javax.persistence.Id; import jakarta.persistence.Id;
import javax.persistence.JoinColumn; import jakarta.persistence.JoinColumn;
import javax.persistence.JoinTable; import jakarta.persistence.JoinTable;
import javax.persistence.MapKeyTemporal; import jakarta.persistence.MapKeyTemporal;
import javax.persistence.OneToMany; import jakarta.persistence.OneToMany;
import javax.persistence.Table; import jakarta.persistence.Table;
import javax.persistence.TemporalType; import jakarta.persistence.TemporalType;
import java.util.Date; import java.util.Date;
import java.util.Map; import java.util.Map;

View File

@ -2,15 +2,15 @@ package com.baeldung.hibernate.pojo;
import org.hibernate.annotations.*; import org.hibernate.annotations.*;
import javax.persistence.Entity; import jakarta.persistence.Entity;
import javax.persistence.*; import jakarta.persistence.*;
import java.io.Serializable; import java.io.Serializable;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;
@Entity @Entity
@Where(clause = "deleted = false") @Where(clause = "deleted = false")
@FilterDef(name = "incomeLevelFilter", parameters = @ParamDef(name = "incomeLimit", type = "int")) @FilterDef(name = "incomeLevelFilter", parameters = @ParamDef(name = "incomeLimit", type = Integer.class))
@Filter(name = "incomeLevelFilter", condition = "grossIncome > :incomeLimit") @Filter(name = "incomeLevelFilter", condition = "grossIncome > :incomeLimit")
public class Employee implements Serializable { public class Employee implements Serializable {

View File

@ -1,8 +1,11 @@
package com.baeldung.hibernate.pojo; package com.baeldung.hibernate.pojo;
import org.hibernate.annotations.Any; import org.hibernate.annotations.Any;
import org.hibernate.annotations.AnyDiscriminator;
import org.hibernate.annotations.AnyDiscriminatorValue;
import org.hibernate.annotations.AnyKeyJavaClass;
import javax.persistence.*; import jakarta.persistence.*;
import java.io.Serializable; import java.io.Serializable;
@Entity @Entity
@ -14,10 +17,12 @@ public class EntityDescription implements Serializable {
private String description; private String description;
@Any( @Any
metaDef = "EntityDescriptionMetaDef", @AnyDiscriminator(DiscriminatorType.STRING)
metaColumn = @Column(name = "entity_type") @AnyDiscriminatorValue(discriminator = "S", entity = Employee.class)
) @AnyDiscriminatorValue(discriminator = "I", entity = Phone.class)
@AnyKeyJavaClass(Integer.class)
@Column(name = "entity_type")
@JoinColumn(name = "entity_id") @JoinColumn(name = "entity_id")
private Serializable entity; private Serializable entity;

View File

@ -1,9 +1,9 @@
package com.baeldung.hibernate.pojo; package com.baeldung.hibernate.pojo;
import javax.persistence.Entity; import jakarta.persistence.Entity;
import javax.persistence.GeneratedValue; import jakarta.persistence.GeneratedValue;
import javax.persistence.GenerationType; import jakarta.persistence.GenerationType;
import javax.persistence.Id; import jakarta.persistence.Id;
import java.io.Serializable; import java.io.Serializable;
@Entity @Entity

View File

@ -1,7 +1,6 @@
package com.baeldung.hibernate.pojo; package com.baeldung.hibernate.pojo;
import javax.persistence.*; import jakarta.persistence.*;
import java.io.Serializable;
import java.sql.Date; import java.sql.Date;
import java.sql.Time; import java.sql.Time;
import java.sql.Timestamp; import java.sql.Timestamp;
@ -9,7 +8,7 @@ import java.time.*;
import java.util.Calendar; import java.util.Calendar;
@Entity @Entity
public class TemporalValues implements Serializable { public class TemporalValues {
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)
@ -48,7 +47,7 @@ public class TemporalValues implements Serializable {
private java.time.LocalDate localDate; private java.time.LocalDate localDate;
@Basic @Basic
private java.time.LocalTime localTime; private java.time.LocalTime localTimeField;
@Basic @Basic
private java.time.OffsetTime offsetTime; private java.time.OffsetTime offsetTime;
@ -146,11 +145,11 @@ public class TemporalValues implements Serializable {
} }
public LocalTime getLocalTime() { public LocalTime getLocalTime() {
return localTime; return localTimeField;
} }
public void setLocalTime(LocalTime localTime) { public void setLocalTime(LocalTime localTime) {
this.localTime = localTime; this.localTimeField = localTime;
} }
public OffsetTime getOffsetTime() { public OffsetTime getOffsetTime() {

View File

@ -1,9 +1,9 @@
package com.baeldung.hibernate.pojo.inheritance; package com.baeldung.hibernate.pojo.inheritance;
import javax.persistence.Entity; import jakarta.persistence.Entity;
import javax.persistence.Id; import jakarta.persistence.Id;
import javax.persistence.Inheritance; import jakarta.persistence.Inheritance;
import javax.persistence.InheritanceType; import jakarta.persistence.InheritanceType;
@Entity @Entity
@Inheritance(strategy = InheritanceType.JOINED) @Inheritance(strategy = InheritanceType.JOINED)

View File

@ -1,7 +1,7 @@
package com.baeldung.hibernate.pojo.inheritance; package com.baeldung.hibernate.pojo.inheritance;
import javax.persistence.Entity; import jakarta.persistence.Entity;
import javax.persistence.Id; import jakarta.persistence.Id;
import org.hibernate.annotations.Polymorphism; import org.hibernate.annotations.Polymorphism;
import org.hibernate.annotations.PolymorphismType; import org.hibernate.annotations.PolymorphismType;

View File

@ -1,7 +1,7 @@
package com.baeldung.hibernate.pojo.inheritance; package com.baeldung.hibernate.pojo.inheritance;
import javax.persistence.DiscriminatorValue; import jakarta.persistence.DiscriminatorValue;
import javax.persistence.Entity; import jakarta.persistence.Entity;
@Entity @Entity
@DiscriminatorValue("1") @DiscriminatorValue("1")

View File

@ -1,6 +1,6 @@
package com.baeldung.hibernate.pojo.inheritance; package com.baeldung.hibernate.pojo.inheritance;
import javax.persistence.Entity; import jakarta.persistence.Entity;
@Entity @Entity
public class Car extends Vehicle { public class Car extends Vehicle {

View File

@ -0,0 +1,39 @@
package com.baeldung.hibernate.pojo.inheritance;
import org.hibernate.annotations.Polymorphism;
import org.hibernate.annotations.PolymorphismType;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
@Entity
@Polymorphism(type = PolymorphismType.IMPLICIT)
public class Laptop implements Item {
@Id
private Long id;
private String type;
public Laptop(Long id, String type) {
this.id = id;
this.type = type;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}

View File

@ -1,6 +1,6 @@
package com.baeldung.hibernate.pojo.inheritance; package com.baeldung.hibernate.pojo.inheritance;
import javax.persistence.Entity; import jakarta.persistence.Entity;
@Entity @Entity
public class MyEmployee extends Person { public class MyEmployee extends Person {

View File

@ -1,13 +1,11 @@
package com.baeldung.hibernate.pojo.inheritance; package com.baeldung.hibernate.pojo.inheritance;
import javax.persistence.DiscriminatorColumn; import jakarta.persistence.DiscriminatorColumn;
import javax.persistence.DiscriminatorType; import jakarta.persistence.DiscriminatorType;
import javax.persistence.Entity; import jakarta.persistence.Entity;
import javax.persistence.Id; import jakarta.persistence.Id;
import javax.persistence.Inheritance; import jakarta.persistence.Inheritance;
import javax.persistence.InheritanceType; import jakarta.persistence.InheritanceType;
import org.hibernate.annotations.DiscriminatorFormula;
@Entity @Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE) @Inheritance(strategy = InheritanceType.SINGLE_TABLE)

View File

@ -1,7 +1,7 @@
package com.baeldung.hibernate.pojo.inheritance; package com.baeldung.hibernate.pojo.inheritance;
import javax.persistence.DiscriminatorValue; import jakarta.persistence.DiscriminatorValue;
import javax.persistence.Entity; import jakarta.persistence.Entity;
@Entity @Entity
@DiscriminatorValue("2") @DiscriminatorValue("2")

View File

@ -1,7 +1,7 @@
package com.baeldung.hibernate.pojo.inheritance; package com.baeldung.hibernate.pojo.inheritance;
import javax.persistence.Id; import jakarta.persistence.Id;
import javax.persistence.MappedSuperclass; import jakarta.persistence.MappedSuperclass;
@MappedSuperclass @MappedSuperclass
public class Person { public class Person {

View File

@ -1,7 +1,7 @@
package com.baeldung.hibernate.pojo.inheritance; package com.baeldung.hibernate.pojo.inheritance;
import javax.persistence.Entity; import jakarta.persistence.Entity;
import javax.persistence.PrimaryKeyJoinColumn; import jakarta.persistence.PrimaryKeyJoinColumn;
@Entity @Entity
@PrimaryKeyJoinColumn(name = "petId") @PrimaryKeyJoinColumn(name = "petId")

View File

@ -1,9 +1,9 @@
package com.baeldung.hibernate.pojo.inheritance; package com.baeldung.hibernate.pojo.inheritance;
import javax.persistence.Entity; import jakarta.persistence.Entity;
import javax.persistence.Id; import jakarta.persistence.Id;
import javax.persistence.Inheritance; import jakarta.persistence.Inheritance;
import javax.persistence.InheritanceType; import jakarta.persistence.InheritanceType;
@Entity @Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)

View File

@ -1,9 +0,0 @@
@AnyMetaDef(name = "EntityDescriptionMetaDef", metaType = "string", idType = "int",
metaValues = {
@MetaValue(value = "Employee", targetEntity = Employee.class),
@MetaValue(value = "Phone", targetEntity = Phone.class)
})
package com.baeldung.hibernate.pojo;
import org.hibernate.annotations.AnyMetaDef;
import org.hibernate.annotations.MetaValue;

View File

@ -119,8 +119,8 @@ public class DynamicMappingIntegrationTest {
assertThat(employees).hasSize(2); assertThat(employees).hasSize(2);
Employee employee = session.get(Employee.class, 1); Employee employee = session.get(Employee.class, 2);
assertThat(employee.getGrossIncome()).isEqualTo(10_000); assertThat(employee.getGrossIncome()).isEqualTo(12_000);
session.disableFilter("incomeLevelFilter"); session.disableFilter("incomeLevelFilter");
employees = session.createQuery("from Employee").getResultList(); employees = session.createQuery("from Employee").getResultList();

View File

@ -13,6 +13,7 @@ import org.junit.Test;
import com.baeldung.hibernate.pojo.inheritance.Bag; import com.baeldung.hibernate.pojo.inheritance.Bag;
import com.baeldung.hibernate.pojo.inheritance.Book; import com.baeldung.hibernate.pojo.inheritance.Book;
import com.baeldung.hibernate.pojo.inheritance.Car; import com.baeldung.hibernate.pojo.inheritance.Car;
import com.baeldung.hibernate.pojo.inheritance.Laptop;
import com.baeldung.hibernate.pojo.inheritance.MyEmployee; import com.baeldung.hibernate.pojo.inheritance.MyEmployee;
import com.baeldung.hibernate.pojo.inheritance.Pen; import com.baeldung.hibernate.pojo.inheritance.Pen;
import com.baeldung.hibernate.pojo.inheritance.Pet; import com.baeldung.hibernate.pojo.inheritance.Pet;
@ -82,8 +83,11 @@ public class InheritanceMappingIntegrationTest {
Bag bag = new Bag(1, "large"); Bag bag = new Bag(1, "large");
session.save(bag); session.save(bag);
Laptop laptop = new Laptop(1L, "Dell");
session.save(laptop);
assertThat(session.createQuery("from com.baeldung.hibernate.pojo.inheritance.Item") assertThat(session.createQuery("from com.baeldung.hibernate.pojo.inheritance.Item")
.getResultList() .getResultList()
.size()).isEqualTo(0); .size()).isEqualTo(1);
} }
} }

View File

@ -2,7 +2,7 @@ package com.baeldung.hibernate.basicannotation;
import java.io.IOException; import java.io.IOException;
import javax.persistence.PersistenceException; import jakarta.persistence.PersistenceException;
import org.hibernate.Session; import org.hibernate.Session;
import org.hibernate.SessionFactory; import org.hibernate.SessionFactory;

View File

@ -7,13 +7,12 @@ import java.math.BigDecimal;
import java.time.Duration; import java.time.Duration;
import java.util.Set; import java.util.Set;
import javax.money.CurrencyContextBuilder;
import javax.money.Monetary; import javax.money.Monetary;
import javax.money.MonetaryAmount; import javax.money.MonetaryAmount;
import javax.validation.ConstraintViolation; import jakarta.validation.ConstraintViolation;
import javax.validation.Validation; import jakarta.validation.Validation;
import javax.validation.Validator; import jakarta.validation.Validator;
import javax.validation.ValidatorFactory; import jakarta.validation.ValidatorFactory;
import org.hibernate.validator.constraints.CodePointLength; import org.hibernate.validator.constraints.CodePointLength;
import org.hibernate.validator.constraints.CreditCardNumber; import org.hibernate.validator.constraints.CreditCardNumber;
@ -21,12 +20,10 @@ import org.hibernate.validator.constraints.Currency;
import org.hibernate.validator.constraints.Length; import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.LuhnCheck; import org.hibernate.validator.constraints.LuhnCheck;
import org.hibernate.validator.constraints.Range; import org.hibernate.validator.constraints.Range;
import org.hibernate.validator.constraints.SafeHtml;
import org.hibernate.validator.constraints.ScriptAssert; import org.hibernate.validator.constraints.ScriptAssert;
import org.hibernate.validator.constraints.URL; import org.hibernate.validator.constraints.URL;
import org.hibernate.validator.constraints.time.DurationMax; import org.hibernate.validator.constraints.time.DurationMax;
import org.hibernate.validator.constraints.time.DurationMin; import org.hibernate.validator.constraints.time.DurationMin;
import org.javamoney.moneta.CurrencyUnitBuilder;
import org.javamoney.moneta.Money; import org.javamoney.moneta.Money;
import org.junit.BeforeClass; import org.junit.BeforeClass;
import org.junit.Test; import org.junit.Test;

View File

@ -2,11 +2,11 @@ package com.baeldung.hibernate.validation;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import java.util.Set; import java.util.Set;
import javax.persistence.PersistenceException; import jakarta.persistence.PersistenceException;
import javax.validation.ConstraintViolation; import jakarta.validation.ConstraintViolation;
import javax.validation.Validation; import jakarta.validation.Validation;
import javax.validation.Validator; import jakarta.validation.Validator;
import javax.validation.ValidatorFactory; import jakarta.validation.ValidatorFactory;
import org.hibernate.Session; import org.hibernate.Session;
import org.hibernate.SessionFactory; import org.hibernate.SessionFactory;
import org.junit.Before; import org.junit.Before;

View File

@ -85,15 +85,21 @@
<version>${testcontainers.mysql.version}</version> <version>${testcontainers.mysql.version}</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency>
<groupId>io.hypersistence</groupId>
<artifactId>hypersistence-utils-hibernate-60</artifactId>
<version>3.3.1</version>
</dependency>
</dependencies> </dependencies>
<properties> <properties>
<org.springframework.version>5.0.2.RELEASE</org.springframework.version> <org.springframework.version>6.0.6</org.springframework.version>
<org.springframework.data.version>1.10.6.RELEASE</org.springframework.data.version> <org.springframework.data.version>3.0.3</org.springframework.data.version>
<tomcat-dbcp.version>9.0.0.M26</tomcat-dbcp.version> <tomcat-dbcp.version>9.0.0.M26</tomcat-dbcp.version>
<mysql.version>6.0.6</mysql.version> <mysql.version>8.0.32</mysql.version>
<mariaDB4j.version>2.2.3</mariaDB4j.version> <mariaDB4j.version>2.6.0</mariaDB4j.version>
<h2.version>2.1.214</h2.version> <h2.version>2.1.214</h2.version>
<hibernate.version>6.1.7.Final</hibernate.version>
<testcontainers.mysql.version>1.17.6</testcontainers.mysql.version> <testcontainers.mysql.version>1.17.6</testcontainers.mysql.version>
</properties> </properties>

View File

@ -1,7 +1,7 @@
package com.baeldung.hibernate.criteria.model; package com.baeldung.hibernate.criteria.model;
import java.io.Serializable; import java.io.Serializable;
import javax.persistence.Entity; import jakarta.persistence.Entity;
@org.hibernate.annotations.NamedQueries({ @org.hibernate.annotations.NamedQueries({
@org.hibernate.annotations.NamedQuery(name = "Employee_findByEmployeeId", query = "from Employee where id = :employeeId"), @org.hibernate.annotations.NamedQuery(name = "Employee_findByEmployeeId", query = "from Employee where id = :employeeId"),

View File

@ -12,10 +12,10 @@ package com.baeldung.hibernate.criteria.view;
import java.util.List; import java.util.List;
import javax.persistence.criteria.CriteriaBuilder; import jakarta.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery; import jakarta.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate; import jakarta.persistence.criteria.Predicate;
import javax.persistence.criteria.Root; import jakarta.persistence.criteria.Root;
import org.hibernate.Session; import org.hibernate.Session;
import org.hibernate.query.Query; import org.hibernate.query.Query;

View File

@ -3,9 +3,9 @@ package com.baeldung.hibernate.criteria.view;
import com.baeldung.hibernate.criteria.model.Employee; import com.baeldung.hibernate.criteria.model.Employee;
import com.baeldung.hibernate.criteria.util.HibernateUtil; import com.baeldung.hibernate.criteria.util.HibernateUtil;
import java.util.List; import java.util.List;
import javax.persistence.criteria.CriteriaBuilder; import jakarta.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery; import jakarta.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root; import jakarta.persistence.criteria.Root;
import org.hibernate.Session; import org.hibernate.Session;
import org.hibernate.query.Query; import org.hibernate.query.Query;

View File

@ -1,11 +1,11 @@
package com.baeldung.hibernate.criteriaquery; package com.baeldung.hibernate.criteriaquery;
import javax.persistence.Column; import jakarta.persistence.Column;
import javax.persistence.Entity; import jakarta.persistence.Entity;
import javax.persistence.GeneratedValue; import jakarta.persistence.GeneratedValue;
import javax.persistence.GenerationType; import jakarta.persistence.GenerationType;
import javax.persistence.Id; import jakarta.persistence.Id;
import javax.persistence.Table; import jakarta.persistence.Table;
@Entity @Entity
@Table(name = "students") @Table(name = "students")

View File

@ -1,14 +1,15 @@
package com.baeldung.hibernate.customtypes; package com.baeldung.hibernate.customtypes;
import org.hibernate.type.LocalDateType;
import org.hibernate.type.descriptor.WrapperOptions;
import org.hibernate.type.descriptor.java.AbstractTypeDescriptor;
import org.hibernate.type.descriptor.java.ImmutableMutabilityPlan;
import org.hibernate.type.descriptor.java.MutabilityPlan;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class LocalDateStringJavaDescriptor extends AbstractTypeDescriptor<LocalDate> { import org.hibernate.type.descriptor.WrapperOptions;
import org.hibernate.type.descriptor.java.ImmutableMutabilityPlan;
import io.hypersistence.utils.hibernate.type.array.internal.AbstractArrayTypeDescriptor;
public class LocalDateStringJavaDescriptor extends AbstractArrayTypeDescriptor<LocalDate> {
public static final LocalDateStringJavaDescriptor INSTANCE = new LocalDateStringJavaDescriptor(); public static final LocalDateStringJavaDescriptor INSTANCE = new LocalDateStringJavaDescriptor();
@ -18,12 +19,12 @@ public class LocalDateStringJavaDescriptor extends AbstractTypeDescriptor<LocalD
@Override @Override
public String toString(LocalDate value) { public String toString(LocalDate value) {
return LocalDateType.FORMATTER.format(value); return DateTimeFormatter.ISO_LOCAL_DATE.format(value);
} }
@Override @Override
public LocalDate fromString(String string) { public LocalDate fromString(CharSequence string) {
return LocalDate.from(LocalDateType.FORMATTER.parse(string)); return LocalDate.from( DateTimeFormatter.ISO_LOCAL_DATE.parse(string));
} }
@Override @Override
@ -33,7 +34,7 @@ public class LocalDateStringJavaDescriptor extends AbstractTypeDescriptor<LocalD
return null; return null;
if (String.class.isAssignableFrom(type)) if (String.class.isAssignableFrom(type))
return (X) LocalDateType.FORMATTER.format(value); return (X) DateTimeFormatter.ISO_LOCAL_DATE.format(value);
throw unknownUnwrap(type); throw unknownUnwrap(type);
} }
@ -43,8 +44,8 @@ public class LocalDateStringJavaDescriptor extends AbstractTypeDescriptor<LocalD
if (value == null) if (value == null)
return null; return null;
if(String.class.isInstance(value)) if(value instanceof String)
return LocalDate.from(LocalDateType.FORMATTER.parse((CharSequence) value)); return LocalDate.from( DateTimeFormatter.ISO_LOCAL_DATE.parse((CharSequence) value));
throw unknownWrap(value.getClass()); throw unknownWrap(value.getClass());
} }

View File

@ -2,18 +2,16 @@ package com.baeldung.hibernate.customtypes;
import org.hibernate.dialect.Dialect; import org.hibernate.dialect.Dialect;
import org.hibernate.type.AbstractSingleColumnStandardBasicType; import org.hibernate.type.AbstractSingleColumnStandardBasicType;
import org.hibernate.type.DiscriminatorType; import org.hibernate.type.descriptor.jdbc.VarcharJdbcType;
import org.hibernate.type.descriptor.java.LocalDateJavaDescriptor;
import org.hibernate.type.descriptor.sql.VarcharTypeDescriptor;
import java.time.LocalDate; import java.time.LocalDate;
public class LocalDateStringType extends AbstractSingleColumnStandardBasicType<LocalDate> implements DiscriminatorType<LocalDate> { public class LocalDateStringType extends AbstractSingleColumnStandardBasicType<LocalDate> {
public static final LocalDateStringType INSTANCE = new LocalDateStringType(); public static final LocalDateStringType INSTANCE = new LocalDateStringType();
public LocalDateStringType() { public LocalDateStringType() {
super(VarcharTypeDescriptor.INSTANCE, LocalDateStringJavaDescriptor.INSTANCE); super(VarcharJdbcType.INSTANCE, LocalDateStringJavaDescriptor.INSTANCE);
} }
@Override @Override
@ -21,14 +19,12 @@ public class LocalDateStringType extends AbstractSingleColumnStandardBasicType<L
return "LocalDateString"; return "LocalDateString";
} }
@Override public LocalDate stringToObject(String xml) {
public LocalDate stringToObject(String xml) throws Exception {
return fromString(xml); return fromString(xml);
} }
@Override public String objectToSQLString(LocalDate value, Dialect dialect) {
public String objectToSQLString(LocalDate value, Dialect dialect) throws Exception { return '\'' + LocalDateStringJavaDescriptor.INSTANCE.toString(value) + '\'';
return '\'' + toString(value) + '\'';
} }
} }

Some files were not shown because too many files have changed in this diff Show More