#java #playframework
#java #playframework
Вопрос:
Если быть точным, у меня есть эти коды на Java (класс A и класс B):
//Class A
package models;
import java.util.*;
import javax.persistence.*;
import play.db.ebean.Model;
@Entity
@Table(name="A")
public class A extends Model {
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="id_a_seq")
@SequenceGenerator(name="id_a_seq", sequenceName="id_a_seq")
@Column(name="ID_A", insertable=true, updatable=true, unique=true, nullable=false)
public Integer id;
@Column(name="NOME")
public String nome;
@Column(unique = true, name="CPF")
public String cpf;
@ManyToMany(cascade = {CascadeType.ALL})
@JoinTable(name="A_B",
joinColumns={@JoinColumn(name="ID_A")},
inverseJoinColumns={@JoinColumn(name="ID_B")})
public List<B> lista = new ArrayList<B>();
}
//Class B
package models;
import java.util.*;
import javax.persistence.*;
import play.db.ebean.Model;
@Entity
@Table(name="B")
public class B extends Model {
public B() {}
public B(Integer id, String nome) {
this.id = id;
this.nome = nome;
}
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="id_b_seq")
@SequenceGenerator(name="id_b_seq", sequenceName="id_b_seq")
//@AttributeOverride(name = "id", column = @Column(name = "ID_B"))
@Column(name="ID_B", insertable=true, updatable=true, unique=true, nullable=false)
public Integer id;
@Column(name="NOME")
public String nome;
@ManyToMany(mappedBy="lista")
public List<A> lista = new ArrayList<A>();
}
Когда я запускаю localhost: 9000 в браузере, я получаю это сообщение об ошибке:
«Исключение PersistenceException: ошибка при объединении в [models.B.lista]. Не удалось найти локальное соответствие для [ID_B], Возможно, ошибка в @JoinColumn «.
Я мог бы решить эту проблему, переименовав ID_A и ID_B в ID (для обоих), но я не могу получить идентификатор имени для столбцов id (в таблице A и в таблице B). Мне нужно выяснить, как заставить Play принимать имена ID_A и ID_B для их имени столбца id.
Ответ №1:
Измените сопоставление в вашей lista
связи на:
@ManyToMany(cascade = {CascadeType.ALL})
@JoinTable(name = "A_B",
joinColumns = {@JoinColumn(name = "ID_A", referencedColumnName = "ID_A")},
inverseJoinColumns = {@JoinColumn(name = "ID_B", referencedColumnName = "ID_B")})
public List<B> lista = new ArrayList<B>();
Обратите внимание на добавление referencedColumnName
в @JoinColumn
.
referencedColumnName
ссылка:
При использовании внутри аннотации JoinTable столбец ключа, на который ссылается ссылка, находится в таблице сущностей объекта-владельца или обратной сущности, если объединение является частью определения обратного соединения.
Комментарии:
1. Нет проблем. Если вы считаете, что я правильно ответил на ваш вопрос, не могли бы вы принять это? Спасибо