0
問題 我有兩個實體(Column和Table)。一個列有一個列表用於存儲此列的連接路徑,所以我需要非常重要的表的順序。JPA 2.0 - 使用@OrdercColumn與Hibernate 4.0.1的單向@ManyToMany關係
以下是實體定義。
@Entity
@javax.persistence.Table(name="Column_")
public class Column extends PersistenceEntity<Column> implements Serializable, Comparable<Column> {
@ManyToMany
@JoinTable(name = "column_joinpath",
joinColumns = {
@JoinColumn(name = "column_id", referencedColumnName = "id")},
inverseJoinColumns = {
@JoinColumn(name = "table_id", referencedColumnName = "id")})
@OrderColumn(name="order_index")
private List<Table> joinPath;
/**
* Default constructor
*/
public Column() {
}
Table-entity沒有對列的引用,因爲表不應該知道它在哪個joinPath中被使用。
爲JoinTable
create table column_joinpath (
column_id varchar(36) not null, -- with FK
table_id varchar(36) not null, -- with FK
order_index integer not null,
primary key (column_id, table_id, order_index)
)
問題創建的SQL語句
爲表
create table Table_ (
id varchar(36) not null,
displayName varchar(255),
primary key (id)
)
爲列
create table Column_ (
id varchar(36) not null,
primary key (id)
)
:Hibernate會忽略在後續的@OrderColumn JPQL
選擇t.displayName從c欄加入c.joinPath t其中C =:山坳
Hibernate會生成以下SQL未經語句
/* Select
t.displayName
from
Column c
join
c.joinPath t
where
c = :col */ select
table2_.displayName as col_0_0_
from
Column_ column0_
inner join
column_joinpath joinpath1_
on column0_.id=joinpath1_.column_id
inner join
Table_ table2_
on joinpath1_.table_id=table2_.id
where
column0_.id=?
的解決方法我用的是原生的順序sql查詢
Select t.displayName from Column_ c inner join column_joinpath joinpath on c.id=joinpath.column_id inner join Table_ t on joinpath.table_id=t.id where c.id=:col order by joinpath.order_index
有沒有人可以如何從SQL轉換到JPQL或有一個想法?
在此先感謝。
諾曼