2015-11-17 2 views
1

У меня есть сущность с @GenericGenerator:GenericGenerator не генерирует значение

@Entity 
public class Report { 
    @Id 
    @GenericGenerator(name = "generator", strategy = "foreign", 
      parameters = @Parameter(name = "property", value = "examrequisitions")) 
    // @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Basic(optional = false) 
    @Column(nullable = false, unique = true) 
    private Long id; 

    ... // outcome, status 
} 

Когда я сохраняю, что объект он показывает следующее исключение:

Caused by: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.DatabaseException 
Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'id' cannot be null 
Error Code: 1048 
Call: INSERT INTO SystemCardiologyReports.REPORTS (ID, OUTCOME, STATUS) VALUES (?, ?, ?) 
    bind => [3 parameters bound] 
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'id' cannot be null 

Почему идентификатор null - несмотря на @GenericGenerator?

+0

Я думаю, что сообщение об ошибке ясна: отсутствует идентификатор для объекта. Вы не добавили '@GeneratedValue (generator =" generator ")' к вашему идентификатору. Только '@ GenericGenerator' не указывает на создание значения для идентификатора. –

+0

Я думаю, что вы плохо читали, в нем содержатся исходные строки «Model Reports». – developer033

+0

Вы имеете в виду '// @GeneratedValue (strategy = GenerationType.IDENTITY)'? Вы должны проверить определение '//' (= строки комментариев). И даже без комментариев, вы не ссылаетесь на генератор. –

ответ

1

A GenericGenerator аннотация просто объявляет генератор где-то в вашем коде. Вы можете добавить его в любой пакет, тип, поле или метод. Это не означает, что генератор должен использоваться для аннотированного элемента.

Вам нужно добавить @GeneratedValue на поле, где вы хотите использовать его и ссылаться на него по имени:

@Id 
@GenericGenerator(name = "genericGenerator" ...)) 
@GeneratedValue(generator = "genericGenerator") 
private Long id; 
+0

Человек, действительно спасибо за вашу помощь, теперь он работает, я думал, что я был отправлен с этой GeneratedValue Annotation, это произошло потому, что я несколько раз менял код, поэтому я запутался. Извините и спасибо. – developer033

+1

Нет проблем. Я удалил ненужную информацию из вашего вопроса, чтобы помочь людям с аналогичными проблемами. –

Смежные вопросы