Define persistent classes in Hibernate.
In Hibernate, a persistent class is a Java class that is mapped to a database table and is used to represent the data that is stored in that table. When an instance of a persistent class is created and associated with a Hibernate session, it becomes a persistent object, meaning that it is managed by the Hibernate framework and its state is synchronized with the database.
Mapping to Database Tables: Each persistent class is typically annotated with Hibernate annotations (like @Entity
, @Table
, etc.) or configured in XML to define how it maps to a specific database table.
State Management: When an object of a persistent class is loaded into a Hibernate session, it is in a persistent state. Any changes made to this object are automatically tracked by Hibernate, and these changes can be synchronized with the database when the session is flushed.
Identity: Persistent classes usually have a unique identifier (primary key) that is mapped to a database column. This is often represented by a field annotated with @Id
.
Lifecycle: Persistent classes have a lifecycle that includes transient (not associated with a session), persistent (associated with a session), and detached (not associated with a session but previously was) states.
Relationships: Persistent classes can define relationships with other persistent classes using annotations like @OneToMany
, @ManyToOne
, @ManyToMany
, etc. This allows for complex data models that reflect the relationships in the underlying database.
Data Retrieval and Manipulation: You can perform CRUD (Create, Read, Update, Delete) operations on persistent classes using Hibernate's session methods, such as save()
, update()
, delete()
, and get()
.
Here’s a simple example of a persistent class in Hibernate:
import javax.persistence.*;
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "username", nullable = false, unique = true)
private String username;
@Column(name = "password", nullable = false)
private String password;
// Constructors, getters, and setters
public User() {}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
In summary, persistent classes in Hibernate are essential for mapping Java objects to database tables, managing their state, and facilitating data operations. They form the backbone of the object-relational mapping (ORM) capabilities that Hibernate provides, allowing developers to work with database data in a more object-oriented manner.