草庐IT

QueryDSL-JPA

全部标签

java - 多对多关系的jpa标准

我在Java中有2个POJO类,Answer和Collaborator,它们是多对多关系。classAnswer{@ManyToMany(cascade=CascadeType.ALL)@JoinTable(name="ANSWERS_COLLABORATORS",joinColumns={@JoinColumn(name="aid")},inverseJoinColumns={@JoinColumn(name="cid")})privateSetcollaborators=newHashSet(0);}类Answer有一组Collaborator,但是Collaborator不保留一

java - JPA主键自动生成

我的主键实体如下所示@GeneratedValue(strategy=GenerationType.TABLE)privateLongid;运行时出现错误无法获取或更新下一个值;嵌套异常是org.hibernate.exception.SQLGrammerException:无法获取或更新下一个值但是当我刚改成@GeneratedValueprivateLongid;没有错误抛出。我想在oracledb上为每个表生成唯一的主键。 最佳答案 @GeneratedValue(strategy=GenerationType.TABLE)告

java - 使用 JPA Criteria 构建器进行复杂查询

有人可以建议我如何使用JPACriteriabuilderAPI构建以下查询吗?SELECTid,status,created_atfromtransactionswherestatus='1'andcurrency='USD'andappId='123'orderbyid如果我能找到一个基于给定参数动态创建的解决方案,那就更好了Map使用元模型类或任何其他方式。 最佳答案 是这样的(没有元模型):Mapparams=...;CriteriaBuildercb=em.getCriteriaBuilder();CriteriaQuer

java - 在 JPA 中更新实体的最佳方法是什么

我正在使用JPA进行一些CRUD操作。更新对象的正确方法是什么?通过更新查询还是通过EntityManager的find方法?我有一个Employee对象需要更新。哪个是正确的方法?请指导我。 最佳答案 在QueryAPI上使用executeUpdate()速度更快,因为它绕过了持久上下文。但是,绕过持久上下文会导致内存中实例的状态并且数据库中该记录的实际值不同步。考虑以下示例:Employeeemployee=(Employee)entityManager.find(Employee.class,1);entityManager.

java - JPA:如何覆盖@Embedded属性的列名

人类@EmbeddablepublicclassPerson{@Columnpublicintcode;//...}作为两个不同的属性两次嵌入到Event中:manager和operator@EntitypublicclassEvent{@Embedded@Column(name="manager_code")publicPersonmanager;@Embedded@Column(name="operator_code")publicPersonoperator;//...}当生成具有持久性的数据库模式时,这应该给出两个相应的列。而是抛出一个异常:org.hibernate.Mapp

java - 如何告诉 JPA 首选数据类型

如果我使用JPA(EclipseLink)创建表,String类型会生成varchar2(255)。我如何告诉JPA(通过注释)创建一个varchar2(20)属性。如果我有一个列表,JPA会创建一个BLOB(4000),但我想要一个varchar2(我的序列化对象的字符串很短)这怎么可能?我必须手动完成吗? 最佳答案 您需要使用@Column注解的columnDefinition属性。即@Column(columnDefinition="varchar2(20)") 关于java-如何

java - JPA 找到最后一个条目

我想知道使用JPA获取表的最后一个条目的最佳方法是什么。在SQL中,我正在寻找的是:selectidfromtableorderbyiddesclimit1我在考虑model.count()但这听起来更像是一个hack而不是一个好的解决方案;) 最佳答案 可以通过关键字first或top来限制查询方法的结果,这两个关键字可以互换使用。可以将可选数值附加到top/first以指定要返回的最大结果大小。如果省略数字,则假定结果大小为1。JpaClassfindFirstByOrderByIdDesc();referencedbySpri

java - 附加实体是否需要在 JPA 中合并?

我永远不需要使用EntityManager#merge()是否正确,只要我只处理attached托管实体?换句话说,在attached托管实体上调用merge()没有效果?或者在某些情况下合并会起到一定的作用?我发现这个名字暗示我可以用它来处理OptimisticLockException...:)编辑:简单来说,我对托管实体的理解是,在事务结束时对其属性/字段的修改会持久保存到数据库中。 最佳答案 规范指出:IfXisamanagedentity,itisignoredbythemergeoperation,however,the

java - JPA/hibernate "Composite-id class does not override equals()"

我正在使用JPA并收到以下警告。我对此进行了研究,并理解了为什么我需要覆盖它以及Hibernate如何使用这些方法。不过我还有一个问题:异常:Composite-idclassdoesnotoverrideequals()问题:为什么Hibernate只关心没有复合ID的类?如果只有一个存在,它是否默认比较@Id字段,还是这里发生了更复杂的事情? 最佳答案 因为当实体没有复合ID时,它们只有一个,属于基本支持的类型之一(Integer、Long、String等),并且这些类已经具有定义良好的equals()(和hashCode())

java - 奇怪的 JPA 行为,初始化字段为空

我正在观察实体类的一个非常奇怪的行为,并使用JPA(hibernateentitymanager3.3.1.ga)加载此类的对象。该类有一个(嵌入式)字段,在声明中初始化。该字段的setter实现空检查(即当设置空值时会抛出异常)。...@EntitypublicclassParticipantextendsBaseEntityimplementsComparable{...@EmbeddedprivateAmsDataamsData=newAmsData();publicvoidsetAmsData(AmsDataamsData){Checks.verifyArgNotNull(am