Создание двухмерного массива в Play! Фреймворк - PullRequest
1 голос
/ 08 августа 2011

Я пытаюсь сохранить таблицу данных в двухмерной коллекции. Всякий раз, когда я:

@OneToMany
public List<List<Cell>> cells;

Я получаю ошибку JPA:

Ошибка JPA Произошла ошибка JPA (Невозможно построить EntityManagerFactory): использование @OneToMany или @ManyToMany для таргетинга на не сопоставленный класс: models.Table.cells [java.util.List]

Ячейка - это класс, который я создал, в основном это String декоратор. Есть идеи? Мне просто нужна двумерная матрица, которую я могу хранить.

@Entity public class Table extends Model {

    @OneToMany
    public List<Row> rows;

    public Table() {
        this.rows = new ArrayList<Row>();
        this.save();
    }

}

@Entity public class Row extends Model {

    @OneToMany
    public List<Cell> cells;

    public Row() {
        this.cells = new ArrayList<Cell>();
        this.save();
    }

}

@Entity public class Cell extends Model {

    public String content;

    public Cell(String content) {
        this.content = content;
        this.save();
    }

}

1 Ответ

2 голосов
/ 08 августа 2011

Насколько я знаю, @OneToMany работает только со списком сущностей.Вы создаете список из списка, который не является сущностью, поэтому он не работает.

Попробуйте изменить модель на:

Таблица> Строка> Ячейка

Всеиз них через @OneToMany, так что вы можете иметь свою двумерную структуру, но с сущностями.

РЕДАКТИРОВАТЬ:

Я считаю, что ваше объявление модели не правильно.Попробуйте это:

@Entity public class Table extends Model {

    @OneToMany(mappedBy="table")
    public List<Row> rows;

    public Table() {
        this.rows = new ArrayList<Row>();
    }

    public Table addRow(Row r) {
        r.table = this;
        r.save();
        this.rows.add(r);      
        return this.save();
    }

}

@Entity public class Row extends Model {

    @OneToMany(mappedBy="row")
    public List<Cell> cells;

    @ManyToOne
    public Table table;

    public Row() {
        this.cells = new ArrayList<Cell>();
    }

    public Row addCell(String content) {
        Cell cell = new Cell(content);
        cell.row = this;
        cell.save();
        this.cells.add(cell);
        return this.save();
    }

}

@Entity public class Cell extends Model {

    @ManyToOne
    public Row row;       

    public String content;

    public Cell(String content) {
        this.content = content;
    }

}

Для создания:

Row row = new Row();
row.save();
row.addCell("Content");
Table table = new Table();
table.save();
table.addRow(row);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...