JPA加入类型为嵌入式和基本类型
问题描述:
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,查询将返回空结果?嵌入式类型相同吗?
答
我认为你错误地解释了文档。
甲加入可以与OneToOne
,ManyToOne
,OneToMany
,ManyToMany
和ElementCollection
映射被使用。这意味着目标类型的一个连接可以是实体(沿实体关联接合时),一个嵌入(接合至嵌入部分的ElementCollection
时),或一个基本类型(接合到ElementCollection
时基本类型)。
上述任何地方都不意味着使用与基本类型的单数属性的连接是有意义的。不过,JPA实现可能会以特定于供应商的方式处理尝试加入这些属性。
如果Embeddable类型具有关联,则在加入关联之前,它必须首先加入Embedded属性。所以它可以加入Embeddable类型的单一属性。 – Sunnyday
不是。唯一需要做的就是使用'root.get()'导航从实体到嵌入属性的路径。我猜你真正要问的是如何处理嵌入属性的空值。答案是在JPA中,具有空值的嵌入属性与用默认值填充的非空嵌入属性无法区分。 – crizzis
root.get(“embeddedAttrName”)返回一个Path实例,该实例无法加入到关联中。加入源必须是From。 – Sunnyday