Какое влияние имеет аннотация @embedded? - PullRequest
8 голосов
/ 05 октября 2011

Как влияет встроенная аннотация на базу данных?

Как нужно изменить запросы SQL?

Каков типичный вариант использования аннотации?

Ответы [ 5 ]

19 голосов
/ 05 октября 2011

Как встроенная аннотация влияет на базу данных?

Это не влияет на нее вообще.На уровне провайдера ORM все поля из встроенной сущности объединены с родительской сущностью и обрабатываются так же, как если бы они были объявлены там все время.Другими словами, это работает так, как если бы вы буквально копировали все поля, геттеры и сеттеры в сущность, содержащую встроенный объект.

Как нужно изменить запросы SQL?

Они не будут.Вам не нужно ничего менять.См. Выше.

Каков типичный случай использования аннотации аннотации?

Иногда у вас есть огромная таблица с несколькими столбцами (особенно с устаревшими базами данных).Однако некоторые столбцы логически связаны друг с другом (например, улица, город и номер телефона в таблице CUSTOMER).Если вы не хотите создавать объект со всеми полями, вы создаете встроенный объект Address.Таким образом, вы логически группируете адресные столбцы в объект вместо того, чтобы иметь одинаково огромный POJO с плоским списком полей.

Использование встроенных объектов считается хорошей практикой, особенно когда обнаруживается сильная связь 1-1.

2 голосов
/ 05 октября 2011

расширение ответа @ Томаш Нуркевич Встроенные объекты полезны для сопоставления таблиц с помощью составного первичного ключа с помощью аннотации @ EmbenddedId

1 голос
/ 03 июля 2014

Как сказал Томаш - это одна цель - другая - вы можете «сфотографировать» состояние другой связанной сущности внутри вашей таблицы. F.E.

@Embeddable public class Company {
    String name;
    String streetName;
    String city;
}



@Entity public class Invoice {

    @Embedded 
    @AttributeOverrides({
        @AttributeOverride(name="name", column=@Column(name="name")),
        @AttributeOverride(name="streetName", column=@Column(name="streetName")),
        @AttributeOverride(name="city", column=@Column(name="city")),
    })            
    Company seller;

    @Embedded 
    @AttributeOverrides({
        @AttributeOverride(name="name", column=@Column(name="name")),
        @AttributeOverride(name="streetName", column=@Column(name="streetName")),
        @AttributeOverride(name="city", column=@Column(name="city")),
    })        
    Company customer;
}

в этом примере - без встроенного и @AttributeOverrides любое изменение в будущем клиента Компании изменит данные в Invoice - что является ошибкой - счет был создан для компании со старыми данными.

Это хорошо объяснено здесь: :) Java - JPA @Basic и @Embedded аннотации

1 голос
/ 06 августа 2013

Каков типичный вариант использования аннотации?

Обычно это представляет составной первичный ключ как встраиваемый класс:

@Entity
public class Project {
    @EmbeddedId ProjectId id;
     :
}



@Embeddable
Class ProjectId {
    int departmentId;
    long projectId;
}

Поля первичного ключа определены в встраиваемом классе. Сущность содержит единственное поле первичного ключа, которое аннотируется @EmbeddedId и содержит экземпляр этого встраиваемого класса. При использовании этой формы отдельный класс ID не определяется, поскольку сам встраиваемый класс может представлять полные значения первичного ключа.

Как влияет встроенная аннотация на базу данных?

Это не так. Используйте эту аннотацию для представления составного первичного ключа.

Как нужно изменить SQL-запросы?

Они не будут.

0 голосов
/ 26 мая 2017

Это не всегда должен быть идентификатор класса.В доменно-управляемом дизайне вы можете создать component из некоторых свойств объекта, например, в этом примере http://yaarunmulle.com/hibernate/hibernate-example/hibernate-mapping-component-using-annotations-1.html у ученика есть компонент адреса.

Свойство Address ученикапомечается @Embedded для указания на компонент класса Address.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...