Q1. What is Hibernate?
Hibernate is an open-source object-relational mapping (ORM) tool for the Java programming language. It simplifies the data access layer of an application by mapping Java classes to database tables, allowing developers to work with objects rather than SQL statements.
Q2. What are the advantages of Hibernate?
Some advantages of Hibernate are:
Q3. What is an ORM tool?
ORM stands for Object-Relational Mapping. An ORM tool is a software framework that maps objects defined in a programming language to relational database tables, and vice versa. This allows developers to work with objects instead of SQL statements when interacting with a database.
Q4. What is the difference between a Session and a SessionFactory in Hibernate?
In Hibernate, a SessionFactory is an expensive object that is created only once per application, and it represents a pool of database connections. On the other hand, a Session is a lightweight object that represents a single database connection, and it is created each time a new database transaction is required. A SessionFactory is used to create Session objects.
Q5. What is lazy loading in Hibernate?
Lazy loading is a feature of Hibernate that allows objects to be loaded only when they are actually needed. This means that when an object is retrieved from the database, its associated objects are not loaded until they are accessed. This can improve application performance by reducing the amount of data that needs to be retrieved from the database.
Q6. What is the Hibernate configuration file?
The Hibernate configuration file is an XML file that contains the configuration information for Hibernate. It specifies the database connection settings, the mapping between Java classes and database tables, and other settings such as caching and transaction management.
Q7. What is the use of the Hibernate mapping file?
The Hibernate mapping file is an XML file that defines the mapping between Java classes and database tables. It specifies the relationships between objects and tables, the data types of properties, and other metadata about the objects. The mapping file is used by Hibernate to generate SQL statements to interact with the database.
Q8. What is the Hibernate Query Language (HQL)?
The Hibernate Query Language (HQL) is a database-independent object-oriented query language that is used to query objects instead of database tables. It supports object-oriented concepts such as inheritance, polymorphism, and association between objects. HQL queries are translated into SQL statements by Hibernate, allowing developers to work with objects instead of database tables.
Q9. What is the difference between a transient object, a persistent object, and a detached object in Hibernate?
In Hibernate, a transient object is an object that is not associated with a database session, and it has not been saved to the database. A persistent object is an object that is associated with a database session, and it has been saved to the database. A detached object is an object that was once associated with a database session, but the session has been closed or the object has been explicitly detached from the session. Detached objects can be reattached to a session using the merge() method.
Q10. What is the use of the Hibernate caching mechanism?
The Hibernate caching mechanism is used to improve application performance by reducing the number of database queries required to retrieve data. It stores frequently accessed data in memory, which reduces the time required to retrieve the data from the database. There are two types of caching in Hibernate: first-level caching and second-level caching. First-level caching is session-specific and is enabled by default in Hibernate. Second-level caching is application-wide and requires a cache provider to be configured in Hibernate.
Q11. What are the different types of associations in Hibernate?
Hibernate supports four types of associations: One-to-One, One-to-Many, Many-to-One, and Many-to-Many. These associations represent the relationships between two entities or tables in the database.
Q12. What is a Hibernate interceptor?
A Hibernate interceptor is an object that intercepts Hibernate events such as saving an object to the database or retrieving an object from the database. Interceptors can be used to customize Hibernate behavior or to implement auditing or security features.
Q13. What is the difference between save() and persist() methods in Hibernate?
In Hibernate, the save() and persist() methods are used to save an object to the database. The main difference between the two methods is that save() returns the generated ID of the saved object, while persist() does not. Additionally, save() can be used outside of a transaction, while persist() must be used within a transaction.
Q14. What is a transaction in Hibernate?
In Hibernate, a transaction represents a single unit of work that involves one or more database operations. A transaction ensures that all database operations are performed atomically, meaning that either all operations are completed successfully or none of them are. Transactions also provide a level of isolation and consistency to database operations.
Q15. What is the difference between the merge() and update() methods in Hibernate?
In Hibernate, the merge() and update() methods are used to update an object in the database. The main difference between the two methods is that merge() creates a new instance of the object and copies the values of the updated object to the new instance, while update() updates the existing instance of the object. Additionally, merge() can be used outside of a transaction, while update() must be used within a transaction.
Q16. What is the use of the @GeneratedValue annotation in Hibernate?
The @GeneratedValue annotation is used in Hibernate to specify how the primary key of an entity should be generated. Hibernate supports several strategies for generating primary keys, such as AUTO, IDENTITY, and TABLE. The @GeneratedValue annotation is used in conjunction with the @Id annotation to specify the primary key of an entity.
Q17. What is the difference between FetchType.LAZY and FetchType.EAGER in Hibernate?
In Hibernate, FetchType.LAZY and FetchType.EAGER are used to specify how associations between entities should be loaded. FetchType.LAZY means that the associated object is not loaded until it is accessed, while FetchType.EAGER means that the associated object is loaded immediately along with the main object. FetchType.LAZY is the default behavior in Hibernate.
Q18. What is a Hibernate dialect?
A Hibernate dialect is a configuration setting that specifies the SQL dialect of the database being used. Hibernate supports many different databases, and each database has its own SQL dialect. The dialect setting ensures that the generated SQL statements are compatible with the target database.
Q19. What is the use of the @Temporal annotation in Hibernate?
The @Temporal annotation is used in Hibernate to specify the type of a date or time property in an entity. Hibernate supports several types of temporal data, such as DATE, TIME, and TIMESTAMP. The @Temporal annotation is used in conjunction with the @Column annotation to specify the data type of a property.
Q20. What is the difference between a detached criteria and a criteria in Hibernate?
In Hibernate, a criteria is used to create a query that retrieves objects from the database based on certain criteria. A detached criteria is a criteria that is not associated with a Hibernate session, and it can be used to create a query that can be executed later.