Я пытаюсь создать @OneToMany
отношение в спящем режиме. Мне нужно хранить список избирателей для каждой статьи в базе данных. Каждый голос имеет идентификатор пользователя и номер голосования. Мой проект компилируется и запускается, но когда я пытаюсь получить доступ к столбцу @OneToMany
, он не существует и выдает ошибку в заголовке.
Я рассмотрел некоторые другие вопросы здесь, но ни один из них, кажется, не отвечает на этот конкретный вопрос Я хочу использовать список, потому что это облегчает работу моего контроллера.
Вот мои сущности, я пропустил большинство полей в статье и получателей и установщиков, потому что они не очень важны для этого вопроса.
Статья:
@Entity
@Table(name="articles")
public class Article implements Serializable {
private static final long serialVersionUID = 2L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@Column(name = "votes")
private int votes;
@Column(name = "voters")
@ElementCollection
@OneToMany(mappedBy = "vote", cascade = CascadeType.ALL)
private List<Vote> voters = new ArrayList<>();
Голоса:
@Entity
@Table(name = "vote")
public class Vote {
public Vote(long userId, int vote){
setUserId(userId);
setVote(vote);
}
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@ManyToOne
private Article article;
@Column(name = "userId")
private long userId;
@Column(name = "vote")
private int vote; //either 1, 0, or -1
public long getId() {
return id;
}
Ошибка:
java.sql.SQLSyntaxErrorException: Unknown column 'voters' in 'field list'
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120) ~[mysql-connector-java-8.0.13.jar:8.0.13]
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97) ~[mysql-connector-java-8.0.13.jar:8.0.13]
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) ~[mysql-connector-java-8.0.13.jar:8.0.13]
at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:974) ~[mysql-connector-java-8.0.13.jar:8.0.13]
(the stack trace continues but I didn't think it was important)
Ошибка возникает только при попытке доступа к столбцу в моем классе контроллера и во время запросов.
Это запрос, который я хочу сделать:
@Modifying
@Transactional
@Query(value = "UPDATE articles SET voters = ?1 WHERE id = ?2", nativeQuery = true)
int updateArticleVoters(List<Vote> newVoters, long id);
Мне просто нужен способ хранения в базе данных двухмерного массива. Я не знаю, есть ли более простой способ сделать это.
Спасибо за любую помощь