Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+1 440новых вакансий за сутки·54 706вакансий открыто сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании5 625
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 397 кандидатов открыты к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python8 748
  • Облачные технологии6 616
  • QA вакансии2 169
  • Android1 320
  • Инженер данных872
  • Продакт-менеджер302

Разработка

  • iOS1 232
  • Backend вакансии1 204
  • AI вакансии543
  • Fullstack вакансии497
  • Frontend вакансии417
  • Mobile вакансии28

По стеку

  • Go5 212
  • Java3 116
  • Kotlin1 090
  • Node.js995
  • Rust845
  • .NET661
  • PHP320
  • C++271
  • C#208

DevOps и инфраструктура

  • Kubernetes3 913
  • Linux-инфраструктура2 852
  • DevOps вакансии2 678
  • Terraform / IaC2 167
  • Мониторинг и Observability1 066
  • CI/CD923
  • SRE301
  • Кибербезопасность26

Аналитика и данные

  • Аналитик данных533
  • Data Scientist436
  • Бизнес-аналитик400
  • Системный аналитик68

Другие направления

  • Проджект-менеджер90
  • UI/UX дизайн70
  • Ручное тестирование14

По регионам

  • Вакансии в США26 186
  • Вакансии в Европе10 369
  • Работа в России3 628
  • Вакансии в Канаде2 306

По формату

  • Удалённые вакансии43 484
  • Релокация в США26 186
  • Гибридная работа5 597
  • Офисная работа4 383

По уровню

  • Senior вакансии22 724
  • Middle вакансии11 726
  • Junior вакансии3 874

Сейчас нанимают

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML164 вакансии
  • Grab135 вакансий
  • Celonis45 вакансий
  • Spotify37 вакансий
  • Infobip28 вакансий
  • Adyen26 вакансий
  • Monzo19 вакансий
  • Darktrace16 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме HibernateВсе вопросы
HibernateMiddleТеория

Для чего используются аннотации @Embeddable и @Embedded?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

@Embeddable помечает класс-value-object без собственного первичного ключа; @Embedded встраивает его поля в таблицу владельца. Lifecycle встроенного объекта полностью зависит от родительской сущности.

Базовый пример

@Embeddable
public class Address {
    @Column(name = "street", nullable = false)
    private String street;

    @Column(name = "city", nullable = false)
    private String city;

    @Column(name = "zip_code", length = 10)
    private String zipCode;

    // Hibernate требует no-arg конструктор
    protected Address() {}

    public Address(String street, String city, String zipCode) {
        this.street = street;
        this.city = city;
        this.zipCode = zipCode;
    }
}

@Entity
@Table(name = "customers")
public class Customer {
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    @Embedded
    private Address address; // колонки street, city, zip_code попадут в таблицу customers
}

SQL-результат: таблица customers получит колонки id, name, street, city, zip_code — без отдельной таблицы addresses.

@Embeddable и @Embedded в Hibernate

@Embeddable — аннотация на классе, которая говорит Hibernate: этот класс не является самостоятельной сущностью и не имеет собственного первичного ключа. @Embedded — аннотация на поле владельца, указывающая встроить колонки @Embeddable-класса напрямую в таблицу владельца.

Это реализация паттерна Value Object из Domain-Driven Design: объект определяется своими атрибутами, а не идентичностью.

@AttributeOverride при повторном использовании

Если одна сущность дважды использует один @Embeddable-тип (например, адрес доставки и адрес выставления счёта), имена колонок конфликтуют — нужен @AttributeOverride.

@Entity
@Table(name = "orders")
public class Order {
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Embedded
    @AttributeOverrides({
        @AttributeOverride(name = "street",  column = @Column(name = "ship_street")),
        @AttributeOverride(name = "city",    column = @Column(name = "ship_city")),
        @AttributeOverride(name = "zipCode", column = @Column(name = "ship_zip"))
    })
    private Address shippingAddress;

    @Embedded
    @AttributeOverrides({
        @AttributeOverride(name = "street",  column = @Column(name = "bill_street")),
        @AttributeOverride(name = "city",    column = @Column(name = "bill_city")),
        @AttributeOverride(name = "zipCode", column = @Column(name = "bill_zip"))
    })
    private Address billingAddress;
}

Lifecycle и dirty checking

Встроенный объект не имеет собственного lifecycle — он сохраняется, обновляется и удаляется вместе с владельцем. Hibernate включает поля @Embeddable в dirty checking: при изменении customer.getAddress().setCity("Moscow") Hibernate сгенерирует UPDATE для таблицы customers.

Использование в @ElementCollection

@Entity
public class Employee {
    @Id
    private Long id;

    // Список телефонов — коллекция value objects
    @ElementCollection
    @CollectionTable(name = "employee_phones",
                     joinColumns = @JoinColumn(name = "employee_id"))
    private List<Phone> phones;
}

@Embeddable
public class Phone {
    private String type;   // MOBILE, HOME, WORK
    private String number;
}

Подводные камни

  • Если поле типа @Embeddable равно null, Hibernate по умолчанию хранит все его колонки как NULL — при загрузке вернёт null, а не пустой объект. Это ломает цепочки вызовов без null-проверок.
  • Повторное использование одного @Embeddable-типа в сущности без @AttributeOverride вызывает MappingException: Repeated column in mapping при старте приложения.
  • @Embeddable-класс обязан иметь no-arg конструктор (может быть protected), иначе Hibernate не сможет создать экземпляр при загрузке.
  • Изменяемый @Embeddable нарушает семантику Value Object; если объект должен быть неизменяемым (как в DDD), поля следует делать final и убирать сеттеры.
  • JPQL-запросы обращаются к полям через точечную нотацию: WHERE c.address.city = :city — это работает, но индекс нужно создавать явно через @Index на @Table.
  • При использовании @ElementCollection с @Embeddable каждая операция добавления/удаления элемента перезаписывает всю коллекцию в БД (orphan removal на уровне коллекции).
  • Hibernate Envers корректно версионирует встроенные объекты, но при изменении структуры @Embeddable старые ревизии могут стать несовместимы со схемой.

Типичные ошибки

  • Путать термин «embeddable embedded» с соседним механизмом Hibernate.
  • Не называть границу lifecycle, transaction, thread или request для «embeddable embedded».
  • Игнорировать production-эффекты «embeddable embedded»: latency, SQL shape, memory, security или observability.

Что проверяет интервьюер

  • Попросить объяснить механизм «embeddable embedded» на минимальном примере.
  • Проверить, видит ли кандидат failure mode и диагностику для «embeddable embedded».
  • Уточнить, какие настройки или API меняют «embeddable embedded» в реальном сервисе.

Как вы знаете этот вопрос?

Проверить себя по теме Hibernate →

Источники

  • https://jakarta.ee/specifications/persistence/3.2/jakarta-persistence-spec-3.2

Связанные темы

Hibernatebackend-designtechnical-communication

Частые вопросы на собеседовании

  • Что такое проблема N+1 в Hibernate и как её решить?
  • Что такое lazy loading в Hibernate и когда возникает LazyInitializationException?
  • В чём разница между SessionFactory и Session в Hibernate?
  • Что такое Hibernate и что такое ORM (Object-Relational Mapping)?