Почему JPA имеет @Transient аннотацию?

Java имеет transientключевое слово. Почему JPA имеет @Transient вместо того, чтобы просто использовать уже существующее ключевое слово Java?

269
задан deamon 28 January 2010 в 03:00
поделиться

3 ответа

Ключевое слово

Java переходный используется для обозначения того, что поле не должно быть сериализовано, в то время как JPA @Transient аннотация используется для обозначения того, что поле не должно сохраняться в базе данных, т.е. их семантика отличается.

417
ответ дан 23 November 2019 в 02:19
поделиться

Потому что у них разные значения. Аннотация @transient Antotation говорит поставщику JPA не сохранять любой (не являющийся атрибутом) атрибута ) атрибута ). Другое говорит о структуре сериализации не сериализовать атрибут. Возможно, вы захотите иметь @transient свойство и все еще сериализуют его.

109
ответ дан 23 November 2019 в 02:19
поделиться

Как говорили другие, @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, он сохраняет пол и id , но не пытается сохранить вспомогательные логические методы - без ] @Transient базовая система будет жаловаться на то, что в классе Entity Person отсутствуют методы setMale () и setFemale () , и поэтому они не сохранятся Человек вообще.

90
ответ дан 23 November 2019 в 02:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: