标签: java-persistence-api

JPA EntityManager:为什么在merge()上使用persist()?

EntityManager.merge() 可以插入新对象并更新现有对象.

为什么要使用persist()(只能创建新对象)?

merge jpa entitymanager persist java-persistence-api

925
推荐指数
12
解决办法
58万
查看次数

Java Persistence API中FetchType LAZY和EAGER之间的区别?

我是Java Persistence API和Hibernate的新手.

Java Persistence API FetchType.LAZY和之间的区别是什么FetchType.EAGER

java orm hibernate jpa java-persistence-api

512
推荐指数
12
解决办法
44万
查看次数

我应该使用哪个注释:@IdClass或@EmbeddedId

JPA(Java持久性API)规范有2名不同的方式来指定实体组合键:@IdClass@EmbeddedId.

我在我的映射实体上使用了两个注释,但对于那些不熟悉的人来说,结果却是一团糟JPA.

我想只采用一种方法来指定复合键.哪一个真的最好?为什么?

java annotations jpa java-persistence-api

120
推荐指数
6
解决办法
8万
查看次数

Java持久性映射了具有可选属性的超类

我正在使用该javax.persistence包来映射我的Java类.

我有这样的实体:

public class UserEntity extends IdEntity {
}
Run Code Online (Sandbox Code Playgroud)

它扩展了一个名为的映射超类IdEntity:

@MappedSuperclass
public class IdEntity extends VersionEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    // Getters and setters below...    

}
Run Code Online (Sandbox Code Playgroud)

IdEntity超类扩展了另一个名为映射超类VersionEntity,使所有实体继承版本特性:

@MappedSuperclass
public abstract class VersionEntity {

    @Version
    private Integer version;

    // Getters and setters below...

}
Run Code Online (Sandbox Code Playgroud)

为什么?

因为现在我可以在所有实体的IdEntity类上进行泛型查询,它看起来像这样:(示例)

CriteriaBuilder builder = JPA.em().getCriteriaBuilder();
CriteriaQuery<IdEntity> criteria = builder.createQuery(IdEntity.class);
Run Code Online (Sandbox Code Playgroud)

现在来问题了.

我的一些实体将有created_at和时间戳一样的deleted_at.但并非所有实体.

我可以在我的实体类中提供这些属性,如下所示:

public class UserEntity …
Run Code Online (Sandbox Code Playgroud)

java inheritance jpa criteria-api java-persistence-api

5
推荐指数
2
解决办法
1439
查看次数

Spring jpa criteriaBuilder在列表中搜索

我有一个包含作者列表的书类:

@Entity
@Table(name = "book")
public class Book extends Content {

    @ManyToMany(fetch = FetchType.LAZY)
    private List<Author> authors;
...}
Run Code Online (Sandbox Code Playgroud)

现在,这是我的BookSpecifications班级:

public static Specification<Book> authorIdIs(Long authorId) {
    return new Specification<Book>() {
        @Override
        public Predicate toPredicate(Root<Book> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder cb) {
            return cb.isTrue(root.get("authors").get("id").in(authorId));
        }
    };
}
Run Code Online (Sandbox Code Playgroud)

如何检查authorId列表中的给定内容?

错误:

java.lang.IllegalStateException: Illegal attempt to dereference path source [null.authors] of basic type
    at org.hibernate.jpa.criteria.path.AbstractPathImpl.illegalDereference(AbstractPathImpl.java:98) ~[hibernate-entitymanager-4.3.11.Final.jar:4.3.11.Final]
    at org.hibernate.jpa.criteria.path.AbstractPathImpl.get(AbstractPathImpl.java:191) ~[hibernate-entitymanager-4.3.11.Final.jar:4.3.11.Final]
    at com.tarameshgroup.derakht.service.specs.BookSpecifications$3.toPredicate(BookSpecifications.java:40) ~[classes/:na]
    at org.springframework.data.jpa.domain.Specifications$ComposedSpecification.toPredicate(Specifications.java:189) ~[spring-data-jpa-1.9.2.RELEASE.jar:na]
Run Code Online (Sandbox Code Playgroud)

java spring hibernate jpa java-persistence-api

5
推荐指数
1
解决办法
4316
查看次数