Я пытаюсь создать подобный Твиттеру проект с использованием Java2EE, и вот простое представление базы данных.
Упоминание, подписчики и подписки - это три JoinTable.
(Обратите внимание, что упомянутое, follower, follow и каждое пользовательское поле имеют User.username в качестве внешнего ключа.)
У меня проблема с первым, который приводит к сбою моего развертывания с этим исключением:
Описание исключения: имя столбца ссылки [имя пользователя], сопоставленное элементу [упоминания полей], не соответствует действительному полю в ссылке сопоставления.
Вот отображение для двух сущностей.
Чирикать:
public class Tweet implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@NotNull
@Column(name = "id", nullable = false)
private Integer id;
...
@JoinColumn(name = "user", referencedColumnName = "username")
@ManyToOne
User user;
@JoinTable(name = "Mention", joinColumns = {
@JoinColumn(name = "tweet", referencedColumnName = "id")}, inverseJoinColumns = {
@JoinColumn(name = "mentioned", referencedColumnName = "username")})
@OneToMany
private Collection<Tweet> mentions;
Пользователь:
public class User implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 50)
@Column(name = "username", nullable = false, length = 50)
...
@OneToMany(mappedBy = "user")
Collection<Tweet> tweets;
@JoinTable(name = "Following", joinColumns = {
@JoinColumn(name = "user", referencedColumnName = "username")}, inverseJoinColumns = {
@JoinColumn(name = "following", referencedColumnName = "username")})
@OneToMany
Collection<User> following;
@JoinTable(name = "Followers", joinColumns = {
@JoinColumn(name = "user", referencedColumnName = "username")}, inverseJoinColumns = {
@JoinColumn(name = "follower", referencedColumnName = "username")})
@OneToMany
Collection<User> followers;
@OneToMany(mappedBy = "mentions")
Collection<Tweet> mentioning;
Что не так с моим отображением?
Может кто-нибудь указать мне на решение?