Now that we have our entity class ready, in order for me to create objects of this class and save the details into the database, we need to create first something called session factory. And this particular session factory is required in almost all the programs that we're going to work. So what we will do is we will create a utility class for obtaining a session factory object. So I'm going to right click on this entity package here, and then say, new class, but I want this to be a new package called utils. And then I'm going to call this as hibernate util. Press Enter.
A new class with a new package has been created. Let's go and create a private static session factory variable. And to import the same, I'm going to press Command Shift O, and since there is no name conflict, it simply added the import statement over here. Now the reason I made this as a problem With static is because we want this object to be a singleton, so that wherever I asked for a factory, it is going to check if the factory is initialized, it's going to return the same. But if it is not initialized, it's going to initialize one and then return the same. So let's go and create a public function to do the job.
I'm going to say static. It returns a session factory. Let's call it as get session factory. I'm going to say your return factory. But we also have to check has this been initialized, if it's not initialized, we have to initialize the same. So I'm going to say your if factory equals to null, then we're going to do the initialization.
Remember, static variables have been initialized by default with null. A session factory represents a database and a session represents a database connection. Since the session factory represents a dB, we have to pass the DB connectivity information. Let's create a properties object for the same. So with a properties, tops equals to new properties, and the properties is from Java dot util, so I'm going to select the same. And then we're going to add few properties over here.
I'll say props dot set property. The first property is about the driver. So I'm going to say hibernate dot connection dot driver. The value for that depends on the DB that you want to connect to. Since I want to connect to h2 database, it's going to be r dot hits to dot driver, I'm going to make a copy of this and change this to URL URL happens to be the JDBC connection string that you want to use. And if you don't remember, you can go to the h2 console.
And then you can copy the URL from here. So I'm going to copy this, go back over here and replace this one. So I'm going to make another copy of this, paste it and change this to username and the user name for our DB is S A In my case, and then there is a password that I have to give which is empty string. So that's this password. And this is empty string. hibernate converts all your Java function calls into an appropriate SQL command.
For this it makes use of something called dialect class. For most of the applications, this dialect class is not necessary, but for very important complex queries. Without the dialect, hibernate will not work and will throw an error. So let's give this properly by typing props dot set property of hibernate dot dialect. The value for this is our dot hibernate dot dialect. Don't pitch to dialect.
Now if you want to see what other dialects you have, you can press Command Shift t on Mac Ctrl Shift t on Windows or you can go to navigate over Type and then type dialect and you should see our hibernate dialect which is an abstract class over here. If you select that and then press function key four or f4 you will see that there is a bunch of classes that extend the direct class and hedge to dialect is one of them. So if you want to work with for example my SQL you will see that there is a my SQL dialect there is more specific version of the same my SQL five dialect and expand the same thing to see more and more features. So if you want to work with Oracle, for example, there's an Oracle eight islet Oracle nine eight dialect then 10 G and then you have to LC dialect also.
So likewise for Microsoft SQL Server, you will see that there is an abstract transact SQL dialect but if you expand that, you see an SQL Server dialect. There is an SQL Server 2005 and then 2008 and then you have your 2012 dialect. So let's come out of that. Now earlier I mentioned that hibernate can create the tables for You if the tables don't exist, so I'm going to make a copy of this and add here, change this to something called HB m to DD L. HB M stands for hibernate mapping to DDL which is data Definition Language. So basically hibernate is going to convert our hibernate mapping which we are given in the category using annotation into appropriate data Definition Language like create alter drop, and here I'm going to give a value of update which means it is only going to make the changes if needed, otherwise it is not going to do anything.
Since hibernate is going to create the SQL commands for you. If you are interested to see what SQL commands have been generated, you can also give here something called show underscore SQL with a value of true and it will show you the SQL commands. While the SQL command is very lengthy if you want to format that you can also use your format underscore SQL and say that It is true whenever you don't want to just come here and then disable this with value of false. Now that we have enough properties here, let's create a configuration object representing our dB. To do that, I'm going to say configuration CFG equals to new configuration. And make sure to import it from the hybrid package.
So there are two configuration classes. One comes from Java x security auto login, that is not what we want. And this is the one that we want, I select the same, now we have a configuration object. This configuration object can create a session factory for us with the information we are given here. The first thing that we have to do is to say that we have a class called category that this CFG should manage. So I'm going to say CFG dot add annotated class, and I'm going to supply my category dot class as a parameter.
Now in order to create a session factory, you simply have to say see of T dot build session factory. And that actually should give you a session factory object. I can assign this to factory hybrid version four onwards, the factory can be created and kept in something called as a registry. If you want to use that you can say here service registry, let's call it as registry equals to new standard service registry builder, dot apply settings, and then we supply the prompts. So where we are given all these information, then we say here dot build, that gives me what's called as a service registry which we have to import. And once we import this, we can now say here that this registry which contains all this information should be used for building the session factory here.
So I take this and pass it as an argument. And now we have our factory ready. So all of our programs, we're going to see Let's say hibernate util dot get session factory to get a session factory object