2017-01-02 3 views
0

У моего объекта есть поле, имеющее одно к одному соединение с другой таблицей. Как установить значение по умолчанию для этого поля. Я пытался что-то вроде этогоКак установить значение по умолчанию в поле объекта @Entity

@Column(columnDefinition = "int default 5") 
    @OneToOne(cascade = CascadeType.ALL) 
    private Admin admin; 

Но я получаю эту ошибку

@Column(s) not allowed on a @OneToOne 

Есть ли способ для того чтобы достигнуть этого без изменения таблицы в SQL?

EDIT:

Изменен. Теперь у меня такой код.

@ManyToOne(cascade = CascadeType.ALL) 
@JoinColumn(name = "admin_id", referencedColumnName = "id", nullable = false, columnDefinition = "bigint(20) DEFAULT 5") 
private Admin admin; 

Я также добавил @DynamicInsert и @DynamicUpdate, но он по-прежнему не работает. Я также хочу отметить, что те объекты Admin уже существуют в БД, и я не хочу их снова создавать.

+0

У вас есть '' @JoinColumn (name = "xxx") ''? –

+1

Итак, панель администратора PK по умолчанию равна 5? – HRgiger

+0

, вы должны установить это в свой конструктор, загрузив объект Admin из базы данных, так как 5 не может быть pk в каждой среде. –

ответ

1

Если один Администратор (5) может иметь множество сущностей лучше использовать @ManyToOne отношения, которые могли бы выглядеть следующим образом:

@ManyToOne 
@JoinColumn(name="ID") 
private Admin admin; 

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

Admin admin = adminService.getDefaultAdmin(); //returns 'select a from Admin a where id = 5' 
Entity entity = new Entity(); 
..fill the fields 
entity.setAdmin(admin); 
entityService.save(entity); 

таким образом, вы будете убедиться, что вы получили доступ к последней версии администратора, чтобы вы не переопределяете поля администратора или вам не придется беспокоиться за каскадирование.

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