Как использовать дискриминатор наследования отдельных таблиц в ограничении на уникальность? - PullRequest
0 голосов
/ 27 марта 2019

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

Мне нужно убедиться, что предыдущие токены становятся недействительными при отправке нового.Другими словами, новая ссылка, отправленная по электронной почте, делает предыдущую ссылку устаревшей.

Я использую одну и ту же таблицу для всех типов токенов.Ограничение уникальности должно быть на дуэте email-tokenType.

Поэтому я попытался использовать стратегию наследования SINGLE_TABLE, например:

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "TOKEN_TYPE")
public abstract class UserToken {

    @EmbeddedId
    private UserTokenIdentity userTokenIdentity;

    private String token;

}

@Embeddable
public class UserTokenIdentity {

    private String email;

    private String tokenType;
}

@Entity
@DiscriminatorValue("A")
public class ActivationToken extends UserToken {

}

@Entity
@DiscriminatorValue("P")
public class ResetPasswordToken extends UserToken {

}

Проблема в том, что я не могу этого сделать из-заследующая ошибка:

Caused by: org.hibernate.DuplicateMappingException: Table [user_token] contains physical column name [token_type] referred to by multiple physical column names: [tokenType], [TOKEN_TYPE]

Это потому, что я использовал поле в первичном ключе И как дискриминатор для наследования.Я не знаю почему, но это, кажется, недопустимо.

Не могли бы вы высказать свое мнение о том, как мне это сделать?

Я использую liquibase для создания базы данных вручную.

Спасибо

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