Я изучаю Spring Data JPA и пытаюсь построить связь ManyToMany между учетной записью класса и авторитетом класса (роль). Я также хочу отслеживать историю отзыва полномочий (ролей). База данных будет содержать такие атрибуты, как назначенные_at, отозванные_at.
Каковы возможные способы настройки получения полномочий при получении учетной записи?
В настоящее время Hibernate генерирует два SQL-запроса:
Hibernate:
select
a1_0.id,
a1_0.created_at,
a1_0.email,
a1_0.first_name,
a1_0.hash_identifier,
a1_0.last_name,
a1_0.locked,
a1_0.password,
a1_0.username,
a1_0.verified
from
accounts a1_0
Hibernate:
select
aa1_0.account_id,
aa1_0.id,
aa1_0.assigned_at,
a2_0.id,
a2_0.authority_name,
aa1_0.revoked_at
from
accounts_authorities aa1_0
left join
authorities a2_0
on a2_0.id=aa1_0.authority_id
where
aa1_0.account_id=?
Как настроить получение полномочий, чтобы извлекались только активные полномочия. Что-то вроде добавления revoked_at в предложении WHERE имеет значение null:
Hibernate:
select
a1_0.id,
a1_0.created_at,
a1_0.email,
a1_0.first_name,
a1_0.hash_identifier,
a1_0.last_name,
a1_0.locked,
a1_0.password,
a1_0.username,
a1_0.verified
from
accounts a1_0
Hibernate:
select
aa1_0.account_id,
aa1_0.id,
aa1_0.assigned_at,
a2_0.id,
a2_0.authority_name,
aa1_0.revoked_at
from
accounts_authorities aa1_0
left join
authorities a2_0
on a2_0.id=aa1_0.authority_id
where
aa1_0.account_id=?
and
aa1_0.revoked_at is null
Я хотел бы использовать построитель спецификаций и критериев JPA, если мне это нужно. Или есть способ настроить получение полномочий с помощью @OneToMany/@ManyToOne, если это имеет смысл. Я не могу найти подобное решение в официальной документации
Класс учетной записи:
@Entity
@Table(name = "accounts")
public class Account implements UserDetails, CredentialsContainer {
@Id
@GeneratedValue(strategy = GenerationType.UUID)
private UUID id;
private String firstName;
private String lastName;
private String username;
private String email;
private String password;
private LocalDateTime createdAt;
private Boolean verified;
private Boolean locked;
private String hashIdentifier;
@OneToMany(mappedBy = "account")
private Set accountsAuthorities;
}
Класс полномочий:
@Entity
@Table(name = "authorities")
public class Authority {
@Id
@GeneratedValue(strategy = GenerationType.UUID)
private UUID id;
private String authorityName;
@OneToMany(mappedBy = "authority")
private Set accountsAuthorities;
}
Класс AccountAuthority:
@Entity
@Table(name = "accounts_authorities")
public class AccountAuthority implements GrantedAuthority {
@Id
@GeneratedValue(strategy = GenerationType.UUID)
private UUID id;
@ManyToOne
@JoinColumn(name = "account_id")
private Account account;
@ManyToOne
@JoinColumn(name = "authority_id")
private Authority authority;
private LocalDateTime assignedAt;
private LocalDateTime revokedAt;
}
JpaRepository:
@Repository
public interface AccountRepository extends JpaRepository, JpaSpecificationExecutor {
Optional findByUsername(String username);
}
@Override
public List loadAllAccounts() {
return accountRepository.findAll();
}
Подробнее здесь: https://stackoverflow.com/questions/793 ... -new-entit
Как настроить получение? Spring Data JPA, отношение ManyToMany с новым объектом ⇐ JAVA
Программисты JAVA общаются здесь
1735337812
Anonymous
Я изучаю Spring Data JPA и пытаюсь построить связь ManyToMany между учетной записью класса и авторитетом класса (роль). Я также хочу отслеживать историю отзыва полномочий (ролей). База данных будет содержать такие атрибуты, как назначенные_at, отозванные_at.
Каковы возможные способы настройки получения полномочий при получении учетной записи?
[b]В настоящее время Hibernate генерирует два SQL-запроса:[/b]
Hibernate:
select
a1_0.id,
a1_0.created_at,
a1_0.email,
a1_0.first_name,
a1_0.hash_identifier,
a1_0.last_name,
a1_0.locked,
a1_0.password,
a1_0.username,
a1_0.verified
from
accounts a1_0
Hibernate:
select
aa1_0.account_id,
aa1_0.id,
aa1_0.assigned_at,
a2_0.id,
a2_0.authority_name,
aa1_0.revoked_at
from
accounts_authorities aa1_0
left join
authorities a2_0
on a2_0.id=aa1_0.authority_id
where
aa1_0.account_id=?
[b]Как настроить получение полномочий, чтобы извлекались только активные полномочия. Что-то вроде добавления revoked_at в предложении WHERE имеет значение null:[/b]
Hibernate:
select
a1_0.id,
a1_0.created_at,
a1_0.email,
a1_0.first_name,
a1_0.hash_identifier,
a1_0.last_name,
a1_0.locked,
a1_0.password,
a1_0.username,
a1_0.verified
from
accounts a1_0
Hibernate:
select
aa1_0.account_id,
aa1_0.id,
aa1_0.assigned_at,
a2_0.id,
a2_0.authority_name,
aa1_0.revoked_at
from
accounts_authorities aa1_0
left join
authorities a2_0
on a2_0.id=aa1_0.authority_id
where
aa1_0.account_id=?
and
aa1_0.revoked_at is null
[b]Я хотел бы использовать построитель спецификаций и критериев JPA, если мне это нужно. Или есть способ настроить получение полномочий с помощью @OneToMany/@ManyToOne, если это имеет смысл. Я не могу найти подобное решение в официальной документации[/b]
Класс учетной записи:
@Entity
@Table(name = "accounts")
public class Account implements UserDetails, CredentialsContainer {
@Id
@GeneratedValue(strategy = GenerationType.UUID)
private UUID id;
private String firstName;
private String lastName;
private String username;
private String email;
private String password;
private LocalDateTime createdAt;
private Boolean verified;
private Boolean locked;
private String hashIdentifier;
@OneToMany(mappedBy = "account")
private Set accountsAuthorities;
}
Класс полномочий:
@Entity
@Table(name = "authorities")
public class Authority {
@Id
@GeneratedValue(strategy = GenerationType.UUID)
private UUID id;
private String authorityName;
@OneToMany(mappedBy = "authority")
private Set accountsAuthorities;
}
Класс AccountAuthority:
@Entity
@Table(name = "accounts_authorities")
public class AccountAuthority implements GrantedAuthority {
@Id
@GeneratedValue(strategy = GenerationType.UUID)
private UUID id;
@ManyToOne
@JoinColumn(name = "account_id")
private Account account;
@ManyToOne
@JoinColumn(name = "authority_id")
private Authority authority;
private LocalDateTime assignedAt;
private LocalDateTime revokedAt;
}
JpaRepository:
@Repository
public interface AccountRepository extends JpaRepository, JpaSpecificationExecutor {
Optional findByUsername(String username);
}
@Override
public List loadAllAccounts() {
return accountRepository.findAll();
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79309622/how-to-customize-fetching-spring-data-jpa-manytomany-relation-with-a-new-entit[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия