JPA - Каскадная эмиссия - PullRequest
1 голос
/ 19 ноября 2011

В данный момент я застрял в следующей ситуации:

Когда мой проект JSF-JPA загружается впервые, он автоматически создает пользователя-администратора и присваивает ему userType admin:

 User user = new User();
                UserType userType = new UserType();
                user.setUsername("admin");
                user.setPassword("admin");
                userType.setName("admin");
                user.setUserType(userType);
                create(user);
                return user;  

Таким образом, этот код создает пользователя и тип пользователя в базе данных.

Однако, когда я хочу назначить userType пользователю во время выполнения моего проекта, я получаю ошибку «Transaction Aborted»со следующим Stacktrace

Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.0.v20110604-r9504):     org.eclipse.persistence.exceptions.DatabaseException
Internal Exception:     com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry     'admin' for key 'NAME'
Error Code: 1062
Call: INSERT INTO USERTYPE (NAME) VALUES (?)
bind => [1 parameter bound]
Query: InsertObjectQuery(domein.UserType@1751967)

Код выглядит следующим образом

@JoinColumn(nullable=false)
    @OneToOne(cascade = {CascadeType.PERSIST})
    protected UserType userType;

Если уже пробовал все другие различные типы CascadeType, но ни один из них не поддерживал обе вещи, которые я хочу сделать ...

1 Ответ

0 голосов
/ 19 ноября 2011

MySQLIntegrityConstraintViolationException: повторяющаяся запись
'admin' для ключа 'NAME' Код ошибки: 1062

из этого сообщения. Я предполагаю, что у вас уже есть запись в таблице UserType.with Name = admin?

Каскадирование работает нормально, так как мы видели оператор insert into usertype.

Интересно, почему user-> usertype это one2one .. обычно это будет @ManyToOne.ну, это как-то связано с вашим требованием, возможно, вашему приложению нужно, чтобы он был one2one.просто странно себя чувствовать.

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