Как я могу получить EmbeddedId от моей организации

1

У меня вопрос к моим таблицам/сущностям.

Мой SQL-стол выглядит следующим образом:

Таблица 1:

IdTable1 (pk)
Свойства...


Таблица 2:

IdTable2 (pk)
Свойства...


Таблица 3:

IdTable1 (pk)
IdTable2 (pk)
Дата


Хорошо. Теперь у меня есть в Java JPA следующие Eintities:

Таблица 1

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class Table1 {

private Long table1Id

protected Table1() {
    super();
}

protected Table1(Long table1Id) {
    super();
    this.table1Id = table1Id;
}

public boolean equals(Object obj) {
    if (obj instanceof Table1) {
        Table1 fach = (Table1) obj;
        return this.getTable1Id().equals(fach.getTable1Id());
    } else {
        return false;
    }
}

@Id
@Column(name = "IDTABLE1")
public Long getTable1Id() {
    return table1Id;
}

public void setTable1Id(Long table1Id) {
    this.table1Id = table1Id;
}
}

Таблица 2

@Entity
public class Table2 {

private Long table2Id

protected Table2() {
    super();
}

protected Table2(Long table2Id) {
    super();
    this.table2Id = table2Id;
}

public boolean equals(Object obj) {
    if (obj instanceof Table2) {
        Table2 fach = (Table2) obj;
        return this.getTable2Id().equals(fach.getTable2Id());
    } else {
        return false;
    }
}

@Id
@Column(name = "IDTABLE2")
public Long getTable2Id() {
    return table12d;
}

public void setTable2Id(Long table2Id) {
    this.table2Id = table2Id;
}
}

Таблица3

@Entity
public class Table3 implements Serializable {

private static final long serialVersionUID = 1L;

private Table3Id table3Id;
private Date date;

public Table3() {
    super();
}

public Table3(Date date, Table1 table1, Table2 table2) {
    super();
    this.date = date;
    this.table3Id = new Table3Id(table1, table2);
}

@EmbeddedId
public Table3Id getTable3Id() {
    return table3Id;
}

public void setTable3Id(Table3Id table3Id) {
    this.table3Id = table3Id;
}

@Column(name = "date", nullable = true)
public Date getDate() {
    return date;
}

public void setDate(Date date) {
    this.date = date;
}
}

Table3Id

@Embeddable
public class Table3Id implements Serializable {

private static final long serialVersionUID = 1L;

private Table1 table1;
private Table2 table2;

public Table3Id() {
}

public Table3Id(Table1 table1, Table2 table2) {
    this.table1 = table1;
    this.table2 = table2;
}

public Table1 getTable1() {
    return table1;
}

public void setTable1(Table1 table1) {
    this.table1 = table1;
}

public Table2 getTable2() {
    return table2;
}

public void setTable2(Table2 table2) {
    this.table2 = table2;
}
}

Хорошо... Как мне теперь получить свойства Table3 из моего объекта Dao с помощью:?

Query query = entityManager.createQuery("select t from Table3 as t")

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

Это похоже на это, но у меня есть Entities (fe Table1 table1; Table2 table2) в моем EntitiyId, а не "long table1id; long table2id".


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

Я думаю, что запрос @Niemand является правильным, но я получаю следующее исключение:

Caused by: org.hibernate.MappingException: Could not determine type for: Table1, at table: Table3, for columns: [org.hibernate.mapping.Column(table1)]
  • 0
    Не ясно, каковы точные отношения между этими объектами? Если T2 расширяет T1 с помощью стратегии Joined, они обычно разделяют первичный ключ. Есть ли у T1 или T2 один-ко-многим с T3?
  • 0
    Таблица 3 имеет составной первичный ключ (table1id + table2id) и имеет внешний ключ, противоречащий table1id и table2id
Показать ещё 2 комментария
Теги:
jpa

1 ответ

0

Query query = entityManager.createQuery("select t.table3Id.table1, t.table3Id.table2 from Table3 as t")

Это то, что вы хотели?

  • 0
    Не работает ... :(
  • 0
    Пожалуйста, опубликуйте ошибки.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню