Возможно, будет более умный способ, но
intersect(intersect(a,b),c)
выполнит задание.
EDIT: более умно и удобнее, если у вас много аргументов:
Reduce(intersect, list(a,b,c))
Чтобы гарантировать уникальность значения поля, вы можете написать
@Column(unique=true)
String username;
Аннотация @UniqueConstraint предназначена для аннотирования нескольких уникальных ключей на уровне таблицы, поэтому вы получаете ошибку при ее применении к полю.
Ссылки (JPA TopLink):