Подтвердить что ты не робот

Что такое использование аннотаций @Id и @GeneratedValue (strategy = GenerationType.IDENTITY)? Почему тип генерации идентичен?

@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY)

Почему мы используем эти аннотации? Мне нужно знать, будет ли это автоинкремент значений моего идентификатора таблицы. (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");
    }
}

* Нужно ли расширять класс абстракции домена? Какая польза?

4b9b3361

Ответ 1

Позвольте мне ответить на этот вопрос:
Прежде всего, использование аннотаций в качестве нашего метода configure - это просто удобный метод вместо того, чтобы справляться с бесконечным файлом конфигурации XML.

Аннотация @Id наследуется от javax.persistence.Id, указывая, что поле члена ниже является первичным ключом текущего объекта. Следовательно, ваш Hibernate и spring рамки, а также вы можете сделать некоторые reflect работы, основанные на этой аннотации. подробнее см. javadoc для Id

Аннотация @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

Наконец, настало время использовать эту последовательность в Java. Просто добавьте @GeneratedValue:

@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="seq")

В поле generator указывается, какой генератор последовательности вы хотите использовать. Обратите внимание, что это не имя реальной последовательности в БД, а имя, указанное в поле name SequenceGenerator.

4. Полная

Итак, полная версия должна быть такой:

public class MyTable
{
    @Id
    @SequenceGenerator(name="seq",sequenceName="oracle_seq")        
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="seq")               
    private Integer pid;
}

Теперь начните использовать эти аннотации, чтобы упростить разработку JavaWeb.

Ответ 2

В контексте реляционного сопоставления объектов каждый объект должен иметь уникальный идентификатор. Вы используете аннотацию @Id, чтобы указать первичный ключ объекта.

Аннотация @GeneratedValue используется для указания способа создания первичного ключа. В вашем примере вы используете стратегию Identity, которая

Указывает, что поставщик персистентности должен назначать первичные ключи для объект, использующий столбец идентификатора базы данных.

Существуют и другие стратегии, здесь вы можете увидеть больше .