Java Hibernate에서 지속성 클래스와 엔터티 클래스 간의 관계는 무엇입니까?
Hibernate는 Java 프로그램의 객체를 데이터베이스의 관계형 데이터에 매핑하는 데 사용되는 오픈 소스 ORM(Object Relational Mapping) 프레임워크입니다. Hibernate에서 지속성 클래스는 Java 객체와 관계형 데이터베이스 테이블을 매핑하는 데 사용되는 클래스입니다.
Hibernate 지속성 클래스를 작성할 때 다음 규칙을 따라야 합니다:
지속성 클래스는 인수 없는 생성자를 가져야 합니다. 그렇지 않으면 Hibernate는 객체를 생성할 수 없습니다.
지속성 클래스는 데이터베이스의 테이블에 매핑되어야 합니다. @Table 주석을 사용하여 테이블 이름을 지정할 수 있습니다.
지속성 클래스의 속성은 데이터베이스 테이블의 열과 일대일로 일치해야 합니다. @Column 주석을 사용하여 열 이름을 지정할 수 있습니다.
영속 클래스에는 @Id 주석을 사용하여 지정할 수 있는 고유 식별자가 있어야 합니다.
영속 클래스의 속성은 @Basic 주석을 사용하여 문자열, 숫자 등과 같은 기본 유형인지 여부를 지정할 수 있습니다.
영속 클래스의 속성은 @Transient 주석을 사용하여 지정할 수 있으며 데이터베이스에 유지될 필요가 없습니다.
Hibernate에는 많은 기본 키 생성 전략이 있으며, 일반적인 전략으로는 자동 증가, UUID, 시퀀스 등이 있습니다. @GeneratedValue 주석을 사용하여 기본 키 생성 전략을 지정할 수 있습니다. 예:
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id;
@GeneratedValue 주석의 strategy 속성은 기본 키 생성 전략의 방법을 지정하고 IDENTITY는 자동 증가 방법을 사용하여 기본 키.
주석을 사용하여 기본 키 생성 전략을 지정하는 것 외에도 XML 파일을 사용하여 기본 키 생성 전략을 구성할 수도 있습니다. 예:
<id name="id" type="java.lang.Long"> <column name="id" /> <generator class="identity" /> </id>
태그의 클래스 속성은 기본 키 생성 전략의 방법을 지정합니다. ID는 자동 증가 방법을 사용하여 기본 키를 생성하는 것을 의미합니다.
Hibernate 지속성 클래스의 세 가지 상태
Hibernate에서 지속성 클래스에는 일시적 상태, 지속성 상태, 자유 상태의 세 가지 상태가 있습니다.
임시 상태: 영구 클래스 개체는 세션과 연결되지 않았으며 데이터베이스에 저장되지 않았습니다. 이때 수정된 개체의 속성은 데이터베이스에 저장되지 않습니다.
영구 상태: 영구 개체가 데이터베이스에 저장되고 세션과 연결됩니다. 이때 수정된 개체의 속성이 데이터베이스에 저장됩니다.
Free 상태: 영속 객체가 데이터베이스에 저장되었지만 더 이상 Session과 관련이 없습니다. 이때 수정된 객체의 속성은 데이터베이스에 저장되지 않습니다.
세션의 저장, 지속, 업데이트 및 병합 메서드를 사용하여 영구 클래스 객체를 임시 상태에서 영구 상태 또는 자유 상태로 변환할 수 있습니다.
save 메소드는 임시 상태 개체를 데이터베이스에 저장하고 영구 상태 개체를 반환하는 데 사용됩니다. 객체가 이미 지속성인 경우 아무 작업도 수행되지 않습니다.
지속 메서드는 임시 상태 개체를 데이터베이스에 저장하는 데 사용되며 지속 상태 개체를 반환하지 않습니다. 객체가 이미 지속성인 경우 아무 작업도 수행되지 않습니다.
업데이트 메서드는 자유 상태 개체를 데이터베이스에 업데이트하고 영구 상태 개체를 반환하는 데 사용됩니다. 객체가 일시적인 경우 예외가 발생합니다.
병합 메소드는 자유 상태 개체를 세션에 병합하고 영구 상태 개체를 반환하는 데 사용됩니다. 객체가 일시적인 경우 객체를 데이터베이스에 저장하고 객체를 지속 상태로 반환합니다.
Hibernate의 첫 번째 수준 캐시
Hibernate의 첫 번째 수준 캐시는 영구 클래스 개체를 캐시하는 데 사용되는 세션 수준 캐시입니다. 데이터베이스에서 영속 클래스 객체를 쿼리할 때 Hibernate는 먼저 첫 번째 수준 캐시에서 이를 검색합니다. 캐시에 존재하지 않으면 데이터베이스에서 쿼리하고 쿼리 결과를 첫 번째 수준 캐시에 넣습니다.
첫 번째 수준 캐시의 수명 주기는 세션의 수명 주기와 동일합니다. 세션이 닫히면 첫 번째 수준 캐시도 지워집니다. 세션의 evict 및clear 메소드를 사용하여 첫 번째 수준 캐시를 지울 수 있습니다.
evict 메소드는 첫 번째 수준 캐시에서 지정된 개체를 제거하여 개체를 자유롭게 만드는 데 사용됩니다.
clear 메소드는 1단계 캐시의 모든 객체를 지우고 모든 영속 객체를 자유 상태로 변경하는 데 사용됩니다.
Hibernate의 트랜잭션 관리
Hibernate에서 트랜잭션은 데이터베이스 작업의 원자성, 일관성, 격리 및 내구성을 보장하는 데 사용됩니다. 트랜잭션 인터페이스를 사용하여 트랜잭션을 관리할 수 있습니다. 예:
Session session = sessionFactory.openSession(); Transaction tx = session.beginTransaction(); try { // 执行数据库操作 tx.commit(); } catch (Exception e) { tx.rollback(); } finally { session.close(); }
트랜잭션에서 세션의 저장, 지속, 업데이트, 병합, 삭제 및 기타 메소드를 사용하여 영구 클래스 객체를 작동하고 작업 결과를 데이터베이스에 저장할 수 있습니다. 거래가 중간에 제출될 때.
Hibernate의 다른 API
위에 소개된 API 외에도 Hibernate는 다음과 같은 많은 다른 API도 제공합니다.
Criteria API: 영속 클래스 객체를 동적으로 쿼리하는 데 사용됩니다.
HQL(Hibernate Query Language): 영구 클래스 객체를 쿼리하는 데 사용되는 SQL 기반 쿼리 언어입니다.
명명된 쿼리: 쉽게 재사용할 수 있도록 HQL 쿼리 문을 지속성 클래스에 저장합니다.
두 번째 수준 캐시: 쿼리 효율성을 높이기 위해 영구 클래스 개체를 캐시하는 데 사용됩니다.
Hibernate의 엔터티 클래스 관계 매핑
Hibernate에서는 주석, XML 구성 파일 또는 Java 코드를 통해 엔터티 클래스 간의 관계를 매핑할 수 있습니다. 일반적으로 사용되는 관계에는 일대일, 일대다, 다대일 및 다대다 관계가 있습니다.
一对一关系
一对一关系表示两个实体类之间的关系是一对一的关系。在Hibernate中,可以使用@OneToOne注解来进行映射。
例如,一个Person实体类和一个IDCard实体类之间的关系是一对一的关系,可以使用如下的代码进行映射:
@Entity public class Person { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; @OneToOne(mappedBy = "person", cascade = CascadeType.ALL) private IDCard idCard; // getters and setters } @Entity public class IDCard { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String number; @OneToOne @JoinColumn(name = "person_id") private Person person; // getters and setters }
其中,Person实体类中使用了@OneToOne注解来映射与IDCard实体类的关系,属性mappedBy指定了IDCard实体类中的person属性与Person实体类中的idCard属性之间的关系,cascade属性指定了级联操作。
IDCard实体类中使用了@OneToOne注解来映射与Person实体类的关系,属性JoinColumn指定了Person实体类中与IDCard实体类关联的外键列名。
一对多关系
一对多关系表示一个实体类可以对应多个另一个实体类的对象。在Hibernate中,可以使用@OneToMany注解来进行映射。
例如,一个Department实体类中有多个Employee实体类的对象,可以使用如下的代码进行映射:
@Entity public class Department { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; @OneToMany(mappedBy = "department", cascade = CascadeType.ALL) private List<Employee> employees; // getters and setters } @Entity public class Employee { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; @ManyToOne @JoinColumn(name = "department_id") private Department department; // getters and setters }
其中,Department实体类中使用了@OneToMany注解来映射与Employee实体类的关系,属性mappedBy指定了Employee实体类中的department属性与Department实体类中的employees属性之间的关系,cascade属性指定了级联操作。
Employee实体类中使用了@ManyToOne和@JoinColumn注解来映射与Department实体类的关系,属性JoinColumn指定了Department实体类中与Employee实体类关联的外键列名。
多对一关系
多对一关系表示多个实体类可以对应一个另一个实体类的对象。在Hibernate中,可以使用@ManyToOne注解来进行映射。
例如,一个Employee实体类所属于一个Department实体类,可以使用如下的代码进行映射:
@Entity public class Department { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; // getters and setters } @Entity public class Employee { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; @ManyToOne @JoinColumn(name = "department_id") private Department department; // getters and setters }
其中,Employee实体类中使用了@ManyToOne和@JoinColumn注解来映射与Department实体类的关系,属性JoinColumn指定了Department实体类中与Employee实体类关联的外键列名。
多对多关系
多对多关系表示多个实体类之间互相关联。在Hibernate中,可以使用@ManyToMany注解来进行映射。
例如,一个Student实体类可以选择多个Course实体类,一个Course实体类也可以有多个Student实体类,可以使用如下的代码进行映射:
@Entity public class Student { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; @ManyToMany(mappedBy = "students", cascade = CascadeType.ALL) private List<Course> courses; // getters and setters } @Entity public class Course { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; @ManyToMany @JoinTable( name = "course_student", joinColumns = @JoinColumn(name = "course_id"), inverseJoinColumns = @JoinColumn(name = "student_id") ) private List<Student> students; // getters and setters }
其中,Student实体类中使用了@ManyToMany注解来映射与Course实体类的关系,属性mappedBy指定了Course实体类中的students属性与Student实体类中的courses属性之间的关系,cascade属性指定了级联操作。
Course实体类中使用了@ManyToMany和@JoinTable注解来映射与Student实体类的关系,属性JoinTable指定了关联表的名称和两个实体类之间的关联关系。
위 내용은 Java Hibernate에서 지속성 클래스와 엔터티 클래스 간의 관계는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Java의 난수 생성기 안내. 여기서는 예제를 통해 Java의 함수와 예제를 통해 두 가지 다른 생성기에 대해 설명합니다.

Java의 Weka 가이드. 여기에서는 소개, weka java 사용 방법, 플랫폼 유형 및 장점을 예제와 함께 설명합니다.

Java의 Smith Number 가이드. 여기서는 정의, Java에서 스미스 번호를 확인하는 방법에 대해 논의합니다. 코드 구현의 예.

이 기사에서는 가장 많이 묻는 Java Spring 면접 질문과 자세한 답변을 보관했습니다. 그래야 면접에 합격할 수 있습니다.

Java 8은 스트림 API를 소개하여 데이터 컬렉션을 처리하는 강력하고 표현적인 방법을 제공합니다. 그러나 스트림을 사용할 때 일반적인 질문은 다음과 같은 것입니다. 기존 루프는 조기 중단 또는 반환을 허용하지만 스트림의 Foreach 메소드는이 방법을 직접 지원하지 않습니다. 이 기사는 이유를 설명하고 스트림 처리 시스템에서 조기 종료를 구현하기위한 대체 방법을 탐색합니다. 추가 읽기 : Java Stream API 개선 스트림 foreach를 이해하십시오 Foreach 메소드는 스트림의 각 요소에서 하나의 작업을 수행하는 터미널 작동입니다. 디자인 의도입니다

Java의 TimeStamp to Date 안내. 여기서는 소개와 예제와 함께 Java에서 타임스탬프를 날짜로 변환하는 방법에 대해서도 설명합니다.
