отображение свойств имеет неправильное число исключений столбцов - Play-framework - PullRequest
5 голосов
/ 27 июня 2011

Я новичок в игровой среде. Задайте вопрос о JPA и отображениях в игровой среде,

У меня есть стол ученика и стол наставника, связанный отношениями один к одному.

Студенческий стол:

id, name, class, grade

Настольная таблица:

id, name, department, student_id

В вышеизложенном, наставник может иметь или не иметь привязанного к нему студента. Я делаю Модель наставника с отображением один на один,

@OneToOne
@JoinColumn(name="fk_student_id", referencedColumnName="id")
private student Student;

Когда я пытаюсь запустить это, я получаю

Произошла ошибка JPA (Невозможно построить EntityManagerFactory): в сопоставлении свойств указано неверное число столбцов: models.Mentor.student: models.Student.

Я уверен, что сопоставил все поля «Студент», как показано ниже,

Student.java

@Id @GeneratedValue(strategy=GenerationType.AUTO)
private long id;

@Column(name="name")
private String name;

@Column(name="class")
private String cls;

@Column(name="grade")
private String grade;

Что мне здесь не хватает?

Спасибо за ваше время.

С уважением, Abi

Ответы [ 2 ]

2 голосов
/ 27 июня 2011

Вы уверены, что это рабочий код для Play Framework? Есть некоторые различия между Play и стандартным JPA при создании модели. Этот фрагмент:

@OneToOne
@JoinColumn(name="fk_student_id", referencedColumnName="id")
private student Student;

неправильно. Должно быть что-то вроде

@OneToOne
@JoinColumn(name="fk_student_id") //removed the id reference, let JPA manage it
public Student student; //note order of class and var name

Кроме того, вы определяете поле 'id', которое не требуется при расширении из Model. Вы расширяете модель?

0 голосов
/ 04 июня 2013

Также вы можете использовать GenericModel, если вам нужен контроль над вашим идентификатором и стратегией последовательности

Из официальной документации игры :

Пользовательское сопоставление идентификаторов с GenericModel :
Ничто не заставляет вас основывать свои сущности на play.db.jpa.Model. Ваши объекты JPA также могут расширять класс play.db.jpa.GenericModel. Это необходимо, если вы не хотите использовать длинный идентификатор в качестве первичного ключа для вашей сущности.

Например, вот сопоставление для очень простой сущности User. Идентификатор представляет собой UUID, требуются имя и почтовые свойства, и мы используем Play Validation для обеспечения соблюдения простых бизнес-правил.

@Entity
public class User extends GenericModel {
@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid")
public String id;

@Required
public String name;

@Required
@MaxSize(value=255, message = "email.maxsize")
@play.data.validation.Email
public String mail;
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...