programing

JPA에 @Transient 주석이 있는 이유는 무엇입니까?

shortcode 2022. 8. 16. 21:34
반응형

JPA에 @Transient 주석이 있는 이유는 무엇입니까?

에는 Java가 .transient키워드를 지정합니다.에 'JPA'가 있는 거죠?@Transient"java" "java" "java" "java" "java"?

의 ★★★transient 위해 JPA가 시리얼화되지 않습니다.@Transient주석은 필드가 데이터베이스에서 유지되지 않아야 함을 나타내기 위해 사용됩니다. 즉, 의미론이 다릅니다.

미미르르르르르르르 르@Transient에 대해 어떤 것도 지시합니다().transient의 어트리뷰트의 어트리뷰트.다른 하나는 속성을 시리얼화하지 않도록 시리얼화 프레임워크에 지시합니다.도 한 번 드셔보시면 좋을 것 요.@Transient계속 연재하고 있습니다.

이 말하는 것처럼@Transient지속되어서는 안 되는 필드를 표시하기 위해 사용됩니다.하다

public enum Gender { MALE, FEMALE, UNKNOWN }

@Entity
public Person {
    private Gender g;
    private long id;

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    public long getId() { return id; }
    public void setId(long id) { this.id = id; }

    public Gender getGender() { return g; }    
    public void setGender(Gender g) { this.g = g; }

    @Transient
    public boolean isMale() {
        return Gender.MALE.equals(g);
    }

    @Transient
    public boolean isFemale() {
        return Gender.FEMALE.equals(g);
    }
}

되면 "JPA"가 됩니다.gender ★★★★★★★★★★★★★★★★★」id 부울 @Transient은 엔티티 클래스 「」를 합니다.Person is is is is is 。setMale() ★★★★★★★★★★★★★★★★★」setFemale() 때문에 수도 있어요.Person★★★★★★★★★★★★★★★★★★.

용도가 다릅니다.

transient 및 " " "@Transient주석에는 두 가지 다른 목적이 있습니다. 하나는 직렬화를 다루고 다른 하나는 지속성을 다루고 있습니다.프로그래머로서 우리는 종종 이 두 개념을 하나로 결합하지만, 이것은 일반적으로 정확하지 않다.지속성은 지속성을 만든 과정을 능가하는 상태의 특성을 말합니다.Java에서 직렬화는 개체의 상태를 바이트 스트림으로 인코딩/디코딩하는 프로세스를 말합니다.

transient는 '보다 강하다'보다 입니다.@Transient:

에 " " 가 되고 있는 transient이 필드는 오브젝트가 바이트 스트림으로 변환될 때 시리얼화되지 않습니다.는, 「」, 「JPA」, 「Da」라고 가 붙은 에,transient as as as as as as as as as as 를 가진 키워드@Transientpa에pa, papapapapapapapapapapapapapapapapapapapapa.

에는 편, 드, 드, 드, 드, annotated, annotated, annotated, annotated, annotated, annotated, annotated, annotated, annotated, annotated, annotated, annotated, annotated@Transient개체가 직렬화되면 단독으로 바이트 스트림으로 변환되지만 JPA에 의해 유지되지는 않습니다.그 때문에,transient는 ' 강한 입니다.@Transient석입니니다다

여기서 의문이 생깁니다.애플리케이션 데이터베이스에 영속되지 않는 필드를 직렬화하려는 이유는 무엇입니까?현실은 연속화가 지속성이상에 사용된다는 것입니다.Enterprise Java 어플리케이션에서는 분산 컴포넌트 간에 객체를 교환하는 메커니즘이 필요합니다.시리얼라이제이션은 이를 처리하기 위한 공통 통신 프로토콜을 제공합니다.따라서 필드는 컴포넌트 간 통신을 위해 중요한 정보를 보유할 수 있지만, 같은 필드는 지속성 관점에서 값을 갖지 않을 수 있습니다.

예를 들어 최적화 알고리즘이 서버에서 실행되고 이 알고리즘이 완료되기까지 몇 시간이 걸린다고 가정합니다.고객에게 있어서, 최신의 솔루션 세트를 가지는 것은 중요합니다.따라서 클라이언트는 서버에 등록하고 알고리즘 실행 단계에서 정기적인 업데이트를 받을 수 있습니다.는 「」를 됩니다.ProgressReport " " 젝 object : " :

@Entity
public class ProgressReport implements Serializable{

    private static final long serialVersionUID = 1L;

    @Transient
    long estimatedMinutesRemaining;
    String statusMessage;
    Solution currentBestSolution;

}

Solution츠키다

@Entity
public class Solution implements Serializable{

    private static final long serialVersionUID = 1L;

    double[][] dataArray;
    Properties properties;
}

는, 각 「각」의 상태를 합니다.ProgressReport데이터베이스로 이동합니다.는, 「지속하지 않는다」라고 하는 것은 쓰지 않습니다.estimatedMinutesRemaining단, 클라이언트는 이 정보에 대해 확실히 관심을 가지고 있습니다. 때문에 '이러한'은estimatedMinutesRemaining 것을 사용해서 을 달았습니다.@TransientSolution는 알고리즘에 유지되며, JPA는 .ProgressReport.

필드를 유지하지 않으면 일시적 작업과 @Transient 작업이 모두 수행됩니다.하지만 문제는 왜 @Transient가 이미 존재하느냐는 것입니다.

@Transient 필드는 계속 연재됩니다!

엔티티를 생성하여 결과를 얻기 위해 CPU를 많이 사용하는 계산을 수행해도 이 결과가 데이터베이스에 저장되지 않는다고 가정합니다., 를 다른 에는 Java를 .@Transient 키워드가 JavaSE 입니다.transient따라서 다른 VM에서 실행 중인 리시버는 재계산 시간을 절약할 수 있습니다.

문외한의 용어로 엔티티의 속성에 @Transient 주석을 사용하는 경우: 이 속성은 선택되고 데이터베이스에 저장되지 않습니다.엔티티 내 객체의 나머지 속성은 계속 저장됩니다.

예:

다음과 같이 jpa 저장소의 내장 저장 방법을 사용하여 객체를 데이터베이스에 저장합니다.

userRoleJoinRepository.save(user2);

Kotlin 개발자의 경우 Java를 기억하십시오.transient.@Transient그래서 JPA Import를 사용하는 Import가 합니다.@Transient★★★★★★★★★★★★★★★★★★:

import javax.persistence.Transient

나는 "왜"라는 질문에 답하도록 노력할 것이다.테이블에 많은 열이 있는 거대한 데이터베이스가 있고 프로젝트/시스템이 도구를 사용하여 데이터베이스에서 엔티티를 생성하는 상황을 상상해 보십시오.(Hibernate에는 이러한 기능이 있습니다.) 이제 비즈니스 논리에 따라 지속되지 않는 특정 분야가 필요하다고 가정합니다.특정 방법으로 엔티티를 '설정'해야 합니다.Transient 키워드는 Java 언어 내에서 동작하기 때문에 오브젝트에 대해 기능하지만 @Transient는 지속성 태스크에만 응답하도록 설계되었습니다.

언급URL : https://stackoverflow.com/questions/2154622/why-does-jpa-have-a-transient-annotation

반응형