2016-08-08 52 views
1

我有2個實體:DocumentEntity (docNumber (primary key), dateOfFill, ...)FileEntity (id, title, size, ...)。我有一個HQL查詢與內部聯接的2,應在Oracle數據庫上運行:如何內部加入休眠兩個獨立的實體

String queryStr = "SELECT docNumber " + 
      + "FROM DocumentEntity d " + 
      + "INNER JOIN FileEntity f " + 
      + "ON d.docNumber = f.title " + 
      + "WHERE d.date > to_date('01.01.2011','dd.mm.yyyy')" 

Query query = em.createQuery(query_string); 
return query.getResultList(); 

當我運行的代碼片段,我得到一個例外org.hibernate.hql.ast.QuerySyntaxException: Path expected for join!

我通過

但沒有解決我的問題。建議的路徑不能用在這個例子中(至少它給出了錯誤的路徑錯誤)。最後一個鏈接的答案是這樣的:

連接只能在實體之間存在關聯時使用。

問題是我不能關聯這兩個實體。

問題是: 如何加入這兩個實體?

UPDATE: 我的實體是:

@Entity 
@Table(name = "DOCUMENT") 
public class DocumentEntity implements Serializable { 

    private static final long serialVersionUID = 1L; 

    @Id 
    @Column(name = "DOC_NUMBER", nullable = false) 
    private String docNumber; 

    @Basic(optional = false) 
    @Column(name = "DATE_OF_FILL") 
    @Temporal(TemporalType.DATE) 
    private Date dateOfFill; 

    ... 
} 

@Entity 
@Table(name = "FS_FILE") 
public class FileEntity implements Serializable { 

    private static final long serialVersionUID = 1L; 

    @Id 
    @SequenceGenerator(name = "FS_FILE_SEQ", allocationSize = 1, sequenceName = "FS_FILE_SEQ") 
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "FS_FILE_SEQ") 
    @Column(name = "ID", nullable = false) 
    protected Long id; 

    @Column(name = "TITLE", nullable = false) 
    protected String title; 

    @Column(name = "MIMETYPE", nullable = false) 
    protected String mimetype; 

    @Column(name = "FILESIZE", nullable = false) 
    protected Long filesize; 

    @Column(name = "FILEPATH", nullable = false) 
    protected String filepath; 

    ... 
} 
+0

你能顯示你的兩個實體的配置嗎? – davidxxx

+0

@davidhxxx:你究竟是什麼意思?你想看到什麼? – Armine

+0

您的實體... – davidxxx

回答

1

在這種情況下,你不需要做一個連接,因爲你限制的結果與條件d.docNumber = f.title 。 只需在where子句中添加條件並使用SQL查詢而不是JPQL查詢,因爲它似乎更符合您的需要。

String sqlString= "SELECT d.docNumber " + 
      + "FROM DOCUMENT d, FS_FILE f " + 
      + "WHERE d.docNumber = f.title " + 
      + "AND d.date > to_date('01.01.2011','dd.mm.yyyy')" 


Query query = em.createNativeQuery(sqlString); 
return query.getResultList(); 
+0

並將FileEntity放在FROM caluse中的DocumentEntity旁邊? – Armine

+0

不,你不能。我更新了我的代碼。在你的情況下,原生的SQL查詢似乎更符合你的需要。 – davidxxx

+0

那麼,它工作嗎? – davidxxx