Skip to content

Commit caec123

Browse files
authored
[JAVA-41257] Move some submodules between hibernate-mapping and hibernate-mapping-2 (#18443)
1 parent b7b99f2 commit caec123

File tree

78 files changed

+708
-268
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

78 files changed

+708
-268
lines changed

persistence-modules/hibernate-mapping-2/README.md

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@ This module contains articles about Hibernate Mappings.
44

55
### Relevant articles
66

7-
- [Hibernate Many to Many Annotation Tutorial](https://www.baeldung.com/hibernate-many-to-many)
87
- [Boolean Converters in Hibernate 6](https://www.baeldung.com/java-hibernate-6-boolean-converters)
9-
- [Generate UUIDs as Primary Keys With Hibernate](https://www.baeldung.com/java-hibernate-uuid-primary-key)
10-
- [Understanding JPA/Hibernate Associations](https://www.baeldung.com/jpa-hibernate-associations)
8+
- [Mapping LOB Data in Hibernate](https://www.baeldung.com/hibernate-lob)
9+
- [Persisting Maps with Hibernate](https://www.baeldung.com/hibernate-persisting-maps)
10+
- [Hibernate Validator Specific Constraints](https://www.baeldung.com/hibernate-validator-constraints)
11+
- [Mapping A Hibernate Query to a Custom Class](https://www.baeldung.com/hibernate-query-to-custom-class)
12+
- [Dynamic Mapping with Hibernate](https://www.baeldung.com/hibernate-dynamic-mapping)
13+
- [FetchMode in Hibernate](https://www.baeldung.com/hibernate-fetchmode)

persistence-modules/hibernate-mapping-2/pom.xml

Lines changed: 41 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -14,57 +14,69 @@
1414
</parent>
1515

1616
<dependencies>
17-
<!-- Spring -->
18-
<dependency>
19-
<groupId>org.springframework</groupId>
20-
<artifactId>spring-context</artifactId>
21-
<version>${org.springframework.version}</version>
22-
</dependency>
23-
<!-- persistence -->
24-
<dependency>
25-
<groupId>org.springframework.data</groupId>
26-
<artifactId>spring-data-jpa</artifactId>
27-
<version>${org.springframework.data.version}</version>
28-
</dependency>
2917
<dependency>
3018
<groupId>org.hibernate.orm</groupId>
3119
<artifactId>hibernate-core</artifactId>
3220
<version>${hibernate.version}</version>
3321
</dependency>
34-
<dependency>
35-
<groupId>org.apache.tomcat</groupId>
36-
<artifactId>tomcat-dbcp</artifactId>
37-
<version>${tomcat-dbcp.version}</version>
38-
</dependency>
39-
<!-- validation -->
4022
<!-- utils -->
4123
<dependency>
4224
<groupId>com.google.guava</groupId>
4325
<artifactId>guava</artifactId>
4426
<version>${guava.version}</version>
4527
</dependency>
4628
<!-- test scoped -->
47-
<dependency>
48-
<groupId>org.springframework</groupId>
49-
<artifactId>spring-test</artifactId>
50-
<version>${org.springframework.version}</version>
51-
<scope>test</scope>
52-
</dependency>
5329
<dependency>
5430
<groupId>com.h2database</groupId>
5531
<artifactId>h2</artifactId>
5632
<version>${h2.version}</version>
5733
</dependency>
34+
<dependency>
35+
<groupId>org.apache.commons</groupId>
36+
<artifactId>commons-lang3</artifactId>
37+
<version>${commons-lang3.version}</version>
38+
</dependency>
39+
<dependency>
40+
<groupId>commons-io</groupId>
41+
<artifactId>commons-io</artifactId>
42+
<version>${commons-io.version}</version>
43+
</dependency>
44+
<dependency>
45+
<groupId>org.hibernate.validator</groupId>
46+
<artifactId>hibernate-validator</artifactId>
47+
<version>${hibernate-validator.version}</version>
48+
</dependency>
49+
<dependency>
50+
<groupId>javax.money</groupId>
51+
<artifactId>money-api</artifactId>
52+
<version>${money-api.version}</version>
53+
</dependency>
54+
<dependency>
55+
<groupId>org.javamoney</groupId>
56+
<artifactId>moneta</artifactId>
57+
<version>${moneta.version}</version>
58+
<type>pom</type>
59+
</dependency>
60+
<dependency>
61+
<groupId>org.openjdk.nashorn</groupId>
62+
<artifactId>nashorn-core</artifactId>
63+
<version>${nashorn-core.version}</version>
64+
</dependency>
65+
<dependency>
66+
<groupId>org.glassfish.expressly</groupId>
67+
<artifactId>expressly</artifactId>
68+
<version>${expressly.version}</version>
69+
</dependency>
5870
</dependencies>
5971

6072
<properties>
61-
<!-- Spring -->
62-
<org.springframework.version>6.0.6</org.springframework.version>
63-
<org.springframework.data.version>3.0.3</org.springframework.data.version>
64-
<!-- persistence -->
65-
<tomcat-dbcp.version>9.0.0.M26</tomcat-dbcp.version>
6673
<com.sun.xml.version>4.0.2</com.sun.xml.version>
6774
<h2.version>2.1.214</h2.version>
75+
<money-api.version>1.1</money-api.version>
76+
<moneta.version>1.4.2</moneta.version>
77+
<hibernate-validator.version>8.0.1.Final</hibernate-validator.version>
78+
<nashorn-core.version>15.4</nashorn-core.version>
79+
<expressly.version>5.0.0</expressly.version>
6880
</properties>
6981

7082
</project>
Lines changed: 77 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,58 +1,97 @@
11
package com.baeldung.hibernate;
22

3-
import static org.hibernate.boot.registry.StandardServiceRegistryBuilder.DEFAULT_CFG_RESOURCE_NAME;
3+
import java.io.FileInputStream;
4+
import java.io.IOException;
5+
import java.net.URL;
6+
import java.util.Properties;
47

8+
import org.apache.commons.lang3.StringUtils;
59
import org.hibernate.SessionFactory;
10+
import org.hibernate.boot.Metadata;
11+
import org.hibernate.boot.MetadataSources;
612
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
7-
import org.hibernate.cfg.Configuration;
813
import org.hibernate.service.ServiceRegistry;
9-
import org.slf4j.Logger;
10-
import org.slf4j.LoggerFactory;
1114

12-
import com.baeldung.hibernate.booleanconverters.model.Question;
13-
import com.baeldung.hibernate.manytomany.model.Employee;
14-
import com.baeldung.hibernate.manytomany.model.Project;
15-
import com.baeldung.hibernate.uuids.WebSiteUser;
16-
import com.baeldung.hibernate.uuids.Element;
17-
import com.baeldung.hibernate.uuids.Reservation;
18-
import com.baeldung.hibernate.uuids.Sale;
15+
import com.baeldung.hibernate.entities.DeptEmployee;
16+
import com.baeldung.hibernate.pojo.Employee;
17+
import com.baeldung.hibernate.pojo.EntityDescription;
18+
import com.baeldung.hibernate.pojo.Phone;
1919

2020
public class HibernateUtil {
2121

22-
private static final String DEFAULT_RESOURCE = "manytomany.cfg.xml";
23-
private static final Logger LOGGER = LoggerFactory.getLogger(HibernateUtil.class);
22+
private static String PROPERTY_FILE_NAME;
23+
private HibernateUtil() {
24+
}
25+
26+
public static SessionFactory getSessionFactory() throws IOException {
27+
return getSessionFactory("");
28+
}
29+
30+
public static SessionFactory getSessionFactory(String propertyFileName) throws IOException {
31+
if(propertyFileName.equals("")) propertyFileName = null;
32+
PROPERTY_FILE_NAME = propertyFileName;
33+
ServiceRegistry serviceRegistry = configureServiceRegistry();
34+
return makeSessionFactory(serviceRegistry);
35+
}
2436

25-
private static SessionFactory buildSessionFactory(String resource) {
37+
public static SessionFactory getSessionFactory(Strategy strategy) {
38+
return buildSessionFactory(strategy);
39+
}
40+
41+
private static SessionFactory buildSessionFactory(Strategy strategy) {
2642
try {
27-
// Create the SessionFactory from hibernate-annotation.cfg.xml
28-
Configuration configuration = new Configuration();
29-
configuration.addAnnotatedClass(Employee.class);
30-
configuration.addAnnotatedClass(Project.class);
31-
configuration.addAnnotatedClass(WebSiteUser.class);
32-
configuration.addAnnotatedClass(Element.class);
33-
configuration.addAnnotatedClass(Reservation.class);
34-
configuration.addAnnotatedClass(Sale.class);
35-
configuration.addAnnotatedClass(Question.class);
36-
configuration.addPackage(Question.class.getPackageName());
37-
configuration.configure(resource);
38-
LOGGER.debug("Hibernate Annotation Configuration loaded");
39-
40-
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties())
41-
.build();
42-
LOGGER.debug("Hibernate Annotation serviceRegistry created");
43-
44-
return configuration.buildSessionFactory(serviceRegistry);
45-
} catch (Throwable ex) {
46-
LOGGER.error("Initial SessionFactory creation failed.", ex);
43+
ServiceRegistry serviceRegistry = configureServiceRegistry();
44+
45+
MetadataSources metadataSources = new MetadataSources(serviceRegistry);
46+
47+
for (Class<?> entityClass : strategy.getEntityClasses()) {
48+
metadataSources.addAnnotatedClass(entityClass);
49+
}
50+
51+
Metadata metadata = metadataSources.getMetadataBuilder()
52+
.build();
53+
54+
return metadata.getSessionFactoryBuilder()
55+
.build();
56+
} catch (IOException ex) {
4757
throw new ExceptionInInitializerError(ex);
4858
}
4959
}
5060

51-
public static SessionFactory getSessionFactory() {
52-
return buildSessionFactory(DEFAULT_RESOURCE);
61+
private static SessionFactory makeSessionFactory(ServiceRegistry serviceRegistry) {
62+
MetadataSources metadataSources = new MetadataSources(serviceRegistry);
63+
64+
metadataSources.addPackage("com.baeldung.hibernate.pojo");
65+
metadataSources.addAnnotatedClass(Employee.class);
66+
metadataSources.addAnnotatedClass(Phone.class);
67+
metadataSources.addAnnotatedClass(EntityDescription.class);
68+
metadataSources.addAnnotatedClass(DeptEmployee.class);
69+
metadataSources.addAnnotatedClass(com.baeldung.hibernate.entities.Department.class);
70+
71+
Metadata metadata = metadataSources.getMetadataBuilder()
72+
.build();
73+
74+
return metadata.getSessionFactoryBuilder()
75+
.build();
76+
77+
}
78+
79+
80+
private static ServiceRegistry configureServiceRegistry() throws IOException {
81+
Properties properties = getProperties();
82+
return new StandardServiceRegistryBuilder().applySettings(properties)
83+
.build();
5384
}
5485

55-
public static SessionFactory getSessionFactory(String resource) {
56-
return buildSessionFactory(resource);
86+
private static Properties getProperties() throws IOException {
87+
Properties properties = new Properties();
88+
URL propertiesURL = Thread.currentThread()
89+
.getContextClassLoader()
90+
.getResource(StringUtils.defaultString(PROPERTY_FILE_NAME, "hibernate.properties"));
91+
try (FileInputStream inputStream = new FileInputStream(propertiesURL.getFile())) {
92+
properties.load(inputStream);
93+
}
94+
return properties;
5795
}
5896
}
97+
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package com.baeldung.hibernate;
2+
3+
4+
import java.util.Arrays;
5+
import java.util.List;
6+
7+
public enum Strategy {
8+
//See that the classes belongs to different packages
9+
MAP_KEY_COLUMN_BASED(Arrays.asList(com.baeldung.hibernate.persistmaps.mapkeycolumn.Order.class,
10+
com.baeldung.hibernate.basicannotation.Course.class)),
11+
MAP_KEY_BASED(Arrays.asList(com.baeldung.hibernate.persistmaps.mapkey.Item.class,
12+
com.baeldung.hibernate.persistmaps.mapkey.Order.class,com.baeldung.hibernate.persistmaps.mapkey.User.class)),
13+
MAP_KEY_JOIN_COLUMN_BASED(Arrays.asList(com.baeldung.hibernate.persistmaps.mapkeyjoincolumn.Seller.class,
14+
com.baeldung.hibernate.persistmaps.mapkeyjoincolumn.Item.class,
15+
com.baeldung.hibernate.persistmaps.mapkeyjoincolumn.Order.class)),
16+
MAP_KEY_ENUMERATED_BASED(Arrays.asList(com.baeldung.hibernate.persistmaps.mapkeyenumerated.Order.class,
17+
com.baeldung.hibernate.persistmaps.mapkey.Item.class)),
18+
MAP_KEY_TEMPORAL_BASED(Arrays.asList(com.baeldung.hibernate.persistmaps.mapkeytemporal.Order.class,
19+
com.baeldung.hibernate.persistmaps.mapkey.Item.class));
20+
21+
22+
private List<Class<?>> entityClasses;
23+
24+
Strategy(List<Class<?>> entityClasses) {
25+
this.entityClasses = entityClasses;
26+
}
27+
28+
public List<Class<?>> getEntityClasses() {
29+
return entityClasses;
30+
}
31+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.baeldung.hibernate.basicannotation;
2+
3+
import jakarta.persistence.Basic;
4+
import jakarta.persistence.Entity;
5+
import jakarta.persistence.FetchType;
6+
import jakarta.persistence.Id;
7+
8+
@Entity
9+
public class Course {
10+
11+
@Id
12+
private int id;
13+
14+
@Basic(optional = false, fetch = FetchType.LAZY)
15+
private String name;
16+
17+
public int getId() {
18+
return id;
19+
}
20+
21+
public void setId(int id) {
22+
this.id = id;
23+
}
24+
25+
public String getName() {
26+
return name;
27+
}
28+
29+
public void setName(String name) {
30+
this.name = name;
31+
}
32+
}
33+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package com.baeldung.hibernate.booleanconverters;
2+
3+
4+
import org.hibernate.SessionFactory;
5+
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
6+
import org.hibernate.cfg.Configuration;
7+
import org.hibernate.service.ServiceRegistry;
8+
import org.slf4j.Logger;
9+
import org.slf4j.LoggerFactory;
10+
11+
import com.baeldung.hibernate.booleanconverters.model.Question;
12+
13+
14+
public class HibernateUtil {
15+
16+
private static final String DEFAULT_RESOURCE = "manytomany.cfg.xml";
17+
private static final Logger LOGGER = LoggerFactory.getLogger(HibernateUtil.class);
18+
19+
private static SessionFactory buildSessionFactory(String resource) {
20+
try {
21+
// Create the SessionFactory from hibernate-annotation.cfg.xml
22+
Configuration configuration = new Configuration();
23+
configuration.addAnnotatedClass(Question.class);
24+
configuration.addPackage(Question.class.getPackageName());
25+
configuration.configure(resource);
26+
LOGGER.debug("Hibernate Annotation Configuration loaded");
27+
28+
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties())
29+
.build();
30+
LOGGER.debug("Hibernate Annotation serviceRegistry created");
31+
32+
return configuration.buildSessionFactory(serviceRegistry);
33+
} catch (Throwable ex) {
34+
LOGGER.error("Initial SessionFactory creation failed.", ex);
35+
throw new ExceptionInInitializerError(ex);
36+
}
37+
}
38+
39+
public static SessionFactory getSessionFactory() {
40+
return buildSessionFactory(DEFAULT_RESOURCE);
41+
}
42+
43+
public static SessionFactory getSessionFactory(String resource) {
44+
return buildSessionFactory(resource);
45+
}
46+
}

persistence-modules/hibernate-mapping/src/main/java/com/baeldung/hibernate/entities/Department.java renamed to persistence-modules/hibernate-mapping-2/src/main/java/com/baeldung/hibernate/entities/Department.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,11 @@
22

33
import java.util.List;
44

5-
import jakarta.persistence.*;
5+
import jakarta.persistence.Entity;
6+
import jakarta.persistence.GeneratedValue;
7+
import jakarta.persistence.GenerationType;
8+
import jakarta.persistence.Id;
9+
import jakarta.persistence.OneToMany;
610

711
@Entity
812
public class Department {

persistence-modules/hibernate-mapping/src/main/java/com/baeldung/hibernate/fetchMode/Customer.java renamed to persistence-modules/hibernate-mapping-2/src/main/java/com/baeldung/hibernate/fetchMode/Customer.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
package com.baeldung.hibernate.fetchMode;
22

3+
import java.util.HashSet;
4+
import java.util.Set;
5+
36
import org.hibernate.annotations.Fetch;
47
import org.hibernate.annotations.FetchMode;
58

69
import jakarta.persistence.Entity;
710
import jakarta.persistence.GeneratedValue;
811
import jakarta.persistence.Id;
912
import jakarta.persistence.OneToMany;
10-
import java.util.HashSet;
11-
import java.util.Set;
1213

1314
@Entity
1415
public class Customer {

0 commit comments

Comments
 (0)