@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
이 주석을 사용하는 이유는 무엇입니까? 이 자동 증가 테이블 ID 값을 알아야합니다. (GenerationType.IDENTITY)이 주석을 사용할 때 실제로 일어나는 다른 유형이 있습니까?
public class Author extends Domain
{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id")
private Integer id;
@Basic(optional = false)
@Column(name = "name")
private String name;
@Column(name = "address")
private String address;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "authorId")
private List<Book>
bookList;
public Author()
{
setServiceClassName("wawo.tutorial.service.admin.AuthorService");
}
}
* 도메인 추상 클래스 확장이 필요한가요?
답변
이 질문에 답하겠습니다.
우선, 구성 방법으로 주석을 사용하는 것은 끝없는 XML 구성 파일을 처리하는 대신 편리한 방법 일뿐입니다.
@Id
주석은에서 상속 javax.persistence.Id
현재 엔티티의 기본 키가 아래 부재 필드를 나타낸다. 따라서 Hibernate 및 Spring 프레임 워크는 reflect
이 주석을 기반으로 몇 가지 작업을 수행 할 수 있습니다 . 자세한 내용 은 Id에 대한 javadoc을 확인하십시오.
@GeneratedValue
주석은 지정된 열 (필드)의 증가의 길을 구성하는 것입니다. 예를 들어를 사용할 때 테이블 정의에 Mysql
지정 auto_increment
하여 자체 증분으로 만든 다음 사용할 수 있습니다.
@GeneratedValue(strategy = GenerationType.IDENTITY)
Java 코드에서이 데이터베이스 서버 측 전략을 사용하는 것에 동의했음을 나타냅니다. 또한 다른 요구 사항에 맞게이 주석의 값을 변경할 수 있습니다.
1. 데이터베이스에서 시퀀스 정의
예를 들어 Oracle은 sequence
증분 방법 으로 사용해야합니다. Oracle 에서 시퀀스를 생성한다고 가정합니다.
create sequence oracle_seq;
2. 데이터베이스 시퀀스 참조
이제 데이터베이스에 시퀀스가 있지만 다음을 사용하여 Java와 DB 간의 관계를 설정해야합니다 @SequenceGenerator
.
@SequenceGenerator(name="seq",sequenceName="oracle_seq")
sequenceName
Oracle에서 시퀀스의 실제 이름이며 name
Java에서 호출하려는 것입니다. sequenceName
과 다른 경우 지정해야 name
합니다 name
. 그렇지 않으면 . 나는 보통 무시한다sequenceName
시간을 절약하기 위해 합니다.
3. 자바에서 시퀀스 사용
마지막으로 Java에서이 시퀀스를 사용할 때입니다. 다음을 추가하십시오 @GeneratedValue
.
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="seq")
이 generator
필드는 사용할 시퀀스 생성기를 나타냅니다. DB의 실제 시퀀스 이름이 아니라 name
필드에 지정한 이름 입니다 SequenceGenerator
.
4. 완료
따라서 완전한 버전은 다음과 같아야합니다.
public class MyTable
{
@Id
@SequenceGenerator(name="seq",sequenceName="oracle_seq")
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="seq")
private Integer pid;
}
이제 이러한 주석을 사용하여 JavaWeb 개발을 더 쉽게 만드십시오.
답변
개체 관계형 매핑 컨텍스트에서 모든 개체에는 고유 식별자가 있어야합니다. 당신이 사용하는 @Id
엔티티의 기본 키를 지정하는 주석을.
@GeneratedValue
주석은 기본 키를 생성하는 방법을 지정하는 데 사용됩니다. 귀하의 예에서는 다음과 같은 Identity
전략을 사용하고 있습니다.
지속성 공급자가 데이터베이스 ID 열을 사용하여 엔터티에 대한 기본 키를 할당해야 함을 나타냅니다.
다른 전략이 있습니다 . 여기에서 더 많은 것을 볼 수 있습니다 .
답변
Simply, @Id: This annotation specifies the primary key of the entity.
@GeneratedValue: This annotation is used to specify the primary key generation strategy to use. i.e Instructs database to generate a value for this field automatically. If the strategy is not specified by default AUTO will be used.
GenerationType enum defines four strategies:
1. Generation Type . TABLE,
2. Generation Type. SEQUENCE,
3. Generation Type. IDENTITY
4. Generation Type. AUTO
GenerationType.SEQUENCE
With this strategy, underlying persistence provider must use a database sequence to get the next unique primary key for the entities.
GenerationType.TABLE
With this strategy, underlying persistence provider must use a database table to generate/keep the next unique primary key for the entities.
GenerationType.IDENTITY
This GenerationType indicates that the persistence provider must assign primary keys for the entity using a database identity column. IDENTITY column is typically used in SQL Server. This special type column is populated internally by the table itself without using a separate sequence. If underlying database doesn't support IDENTITY column or some similar variant then the persistence provider can choose an alternative appropriate strategy. In this examples we are using H2 database which doesn't support IDENTITY column.
GenerationType.AUTO
This GenerationType indicates that the persistence provider should automatically pick an appropriate strategy for the particular database. This is the default GenerationType, i.e. if we just use @GeneratedValue annotation then this value of GenerationType will be used.
참조 :-https: //www.logicbig.com/tutorials/java-ee-tutorial/jpa/jpa-primary-key.html