Tag: 持久化

如何使用JPA解决javax.persistence.EntityNotFoundException(而不是使用@NotFound)

我们正在使用JPA从数据库加载一些东西。 一些实体可能在它们之间具有可选关系,例如 @Entity public class First { …. @OneToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH, CascadeType.DETACH}) @JoinColumns(value = { JoinColumn(name = “A_ID”, referencedColumnName = “A_ID”, insertable = false, updatable = false), JoinColumn(name = “B_ID”, referencedColumnName = “B_ID”, insertable = false, updatable = false)}) private Second second; 当数据库中存在此关联时,一切正常。 当它不是时,我得到一个javax.persistence.EntityNotFoundException 如果关联不存在,我想要的是将该字段设为NULL而不是exception。 我尝试了几个不同的东西,例如在关系注释中使用optional = true(btw是默认选项),将它设置为Nullable等等。似乎没有什么可以做的,看起来所有这些选项都被忽略了。 我发现很多链接提到了这个相同的问题(以及stackoverflow中的一些问题)但是在所有这些问题中,建议使用来自Hibernate的@NotFound注释。 但我们不希望对Hibernate有任何依赖(我们希望保持所有纯粹的JPA)。 你们其中任何人都知道解决这个问题吗? 非常感谢您的帮助!

Java:JSON – > Protobuf和后向转换

我有一个现有的系统,它在GUI和服务器之间使用基于protobuf的通信协议。 现在我想添加一些持久性,但目前protobuf消息直接转换为第三方自定义对象。 有没有办法将原型消息转换为json ,然后可以将其保存到数据库。 注意:我不太喜欢将二进制protobuf写入数据库的想法,因为它有一天会变得不能与新版本向后兼容并以这种方式破坏系统。

Java JPA GenerationType.Auto值始终为null

我在同一个项目中有几个类,其中id始终是自动生成的。 但是在这种特定情况下,我的id值始终为null。 我真的想知道出了什么问题,因为经过一些改变后它停止了工作。 并将其与其他类进行比较,代码似乎是相同的。 package com.checkin.model.entity; import javax.persistence.*; @Entity public class Checkin { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; @Column(nullable = false) private String date; public Checkin(){ } public Checkin(String date){ this.date = date; System.out.println(this.id); System.out.println(this.getId()); } public Long getId() {return id;} public void setId(Long id) {this.id = id;} public String getDate() {return date;} […]

@OneToMany映射JPA中的父ID为null

我在父子关系中使用javax.persistence.OneToMany关系。 父ID是空的,我已经阅读了Stackoverflow中的所有相关post,但没有得到任何线索我错过了什么。 根据提供的序列,所有相应的PK都在父表和子表中填充,但在子表中将FK设置为​​null 家长class: @Entity @Table(name = “DIVERSITY_TEMPLATE”) public class DiversityTemplate implements Serializable { private static final long serialVersionUID = 1L; @Id @SequenceGenerator(name = “DIVERSITY_TEMPLATE_ID”, sequenceName = “DIVERSITY_TEMPLATE_ID”, allocationSize = 1) @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = “DIVERSITY_TEMPLATE_ID”) @Column(name = “DIVERSITY_TEMPLATE_ID”) private Integer diversityTemplateId; @OneToMany(cascade = CascadeType.ALL, mappedBy = “diversityTemplate”, fetch = FetchType.LAZY) private List attributes […]

如何从org.hibernate.collection.PersistentBag中删除数据? | Hibernate(Jpa)

List Mylist是org.hibernate.collection.PersistentBag … 我想删除这个Mylist …… 我怎么能这样做? QriteriaBuilder criteriaBuilder = em.getCriteriaBuilder(); CriteriaQuery criteriaQuery = criteriaBuilder.createQuery(A_entity.class); criteriaQuery.from(A_entity.class); Query query = em.createQuery(criteriaQuery); List queryList = query.getResultList(); for (A_entity a:queryList) { if(….) { List Mylist = a.func(); ???How delete Mylist???? } } 非常感谢你!!

缺少/不可用依赖项的服务

知道为什么我收到这个错误: JBAS014775: New missing/unsatisfied dependencies: service jboss.jdbc-driver.mysql (missing) dependents: [service jboss.data-source.jboss/datasources/UserDS] ERROR [org.jboss.as.server.deployment.scanner] (DeploymentScanner-threads – 1) `{“JBAS014653: Composite operation failed and was rolled back. Steps that failed:” => {“Operation step-2” => {“JBAS014771: Services with missing/unavailable dependencies” => [“jboss.data-source.jboss/datasources/UserDSjboss.jdbc-driver.com_mysql_jdbcMissing[jboss.data-source.jboss/datasources/UserDSjboss.jdbc-driver.com_mysql_jdbc]”]}}}` persistence.xml中 java:jboss/datasources/UserDS mydatasource-ds.xml中 jdbc:mysql://localhost:3306/test mysql root root module.xml

从EnitityManager获取所有映射的实体

我有一段维护代码,应该在特定时间点为某个用户授予选择权限: grant select on A_DB.A_TABLE to READ_ONLY_USER; 我想为所有表格做这个。 我可以使用Oracle中的select * from tab或在MySQL中show tables来获取完整列表,然后继续这样做。 但是因为我手头已经有了javax.persistence.EntityManager对象,所以我想知道是否有另一种方法来获取所有映射的实体,管理器知道(我正在使用Hibernate)。

如何在运行时覆盖FetchType.EAGER延迟

使用JPA EntityManager和JPA Query对象,如何覆盖在查询中懒惰地获取注释@OneToMany(fetch = FetchType.EAGER)的内容? 如果我有hibernate Query对象,我可以创建一个条件对象并使用它,将fetch类型设置为惰性。 但我必须使用JPA Query对象。 这个问题有什么解决方案吗?

无法将java.lang.Integer字段设置为java.lang.Integer

用户声明: @Entity public class User { @Id @GeneratedValue private Integer id; …. 模式声明: @Entity public class Pattern { @Id @GeneratedValue Integer id; … UserPatternDeclaration: public class UserPattern { @Id @GeneratedValue Integer id; @ManyToOne @JoinColumn(name = “user_id”) User user; @ManyToOne @JoinColumn(name = “pattern_id”) Pattern pattern; … 请求数据库: Session session = sessionFactory.getCurrentSession(); Query query = session.createQuery(“from UserPattern […]

将空列表作为参数传递给JPA查询会引发错误

如果我将空列表传递给JPA查询,我会收到错误。 例如: List municipalities = myDao.findAll(); // returns empty list em.createQuery(“SELECT p FROM Profile p JOIN p.municipality m WHERE m IN (:municipalities)”) .setParameter(“municipalities”, municipalities) .getResultList(); 因为列表是空的,所以Hibernate在SQL中将其生成为“IN()”,这给了我Hypersonic数据库的错误。 在Hibernate问题跟踪中有一个这样的票,但那里没有很多评论/活动。 我不知道其他ORM产品或JPA规范中的支持。 我不喜欢每次都必须手动检查空对象和空列表的想法。 是否有一些众所周知的方法/扩展? 你是如何处理这些情况的?