2017-10-21 45 views
0

JPA加入:可以加入實體,嵌入式或基本類型。JPA加入類型爲嵌入式和基本類型

@Entity 
public class Book { 
    @Id String id; 

    @Embedded 
    Author author; 

    String name; 
} 

Root<Book> root = criteriaQuery.from(Book.class); 
root.join("author", JoinType.LEFT); 
// or 
root.join("author", JoinType.INNER); 
root.join("name", JoinType.INNER); 

從JPA的API,它是合法的,加入到嵌入式和基本型,但到底是什麼的JoinType是什麼意思?對於內連接屬性「名稱」,如果book.name爲null,查詢將返回空結果?嵌入式類型相同嗎?

回答

0

我認爲你錯誤地解釋了文檔。

甲加入可以與OneToOneManyToOneOneToManyManyToManyElementCollection映射被使用。這意味着目標類型的一個連接可以是實體(沿實體關聯接合時),一個嵌入(接合至嵌入部分的ElementCollection時),或一個基本類型(接合到ElementCollection時基本類型)。

上述任何地方都不意味着使用與基本類型的單數屬性的連接是有意義的。不過,JPA實現可能會以特定於供應商的方式處理嘗試加入這些屬性。

+0

如果Embeddable類型具有關聯,則在加入關聯之前,它必須首先加入Embedded屬性。所以它可以加入Embeddable類型的單一屬性。 – Sunnyday

+0

不是。唯一需要做的就是使用'root.get()'導航從實體到嵌入屬性的路徑。我猜你真正要問的是如何處理嵌入屬性的空值。答案是在JPA中,具有空值的嵌入屬性與用默認值填充的非空嵌入屬性無法區分。 – crizzis

+0

root.get(「embeddedAttrName」)返回一個Path實例,該實例無法加入到關聯中。加入源必須是From。 – Sunnyday