Tag: 持久化

JPA – 使用mappedBy属性来定义拥有实体的不同之处

以下两个声明的区别究竟是什么? B是拥有方 @Entity class A { @Id int id; @OneToOne B b; } @Entity class B { @Id int id; @OneToOne(mappedBy=”b”) A a; } A是拥有方 @Entity class A { @Id int id; @OneToOne(mappedBy=”a”) B b; } @Entity class B { @Id int id; @OneToOne A a; } 在“普通SQL”中考虑这一点我认为它与两个表都具有另一个表的外键相同。 我不明白的是,指定哪个实体是拥有方的效果是什么,即使用’mappedBy’属性。 这实际上实现了什么,因为我不相信在普通的SQL中有相同的东西。

更改保留其ID的实体类型

我使用hibernate作为持久层。 有两个实体位于同一个表中,扩展了一个具有单表inheritance策略的超类。 @Entity @Inheritance(strategy = InheritanceType.SINGLE_TABLE) public abstract class A { @Id @GeneratedValue protected Long id; // some common fields for B and C } @Entity public class B extends A { // B-specific fields } @Entity public class C extends A { // C-specific fields } 我有一个id为4的B实例。 如何将此实例的类型更改为C保留其ID(4)? B b = em.find(B.class, 4L); C […]

如何在JPA中拥有2个相同类型的集合?

我在JPA中有两个实体:Entry和Comment。 Entry包含两个Comment对象集合。 @Entity public class Entry { … @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL) @IndexColumn(base = 1, name = “dnr”) private List descriptionComments = new ArrayList(); @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL) @IndexColumn(base = 1, name = “pmnr”) private List postMortemComments = new ArrayList(); … } 为了存储这样的对象,JPA + Hibernate创建了“Entry”表,“Comment”表和SINGLE“Entry_Comment”: create table Entry_Comment (Entry_id integer not […]

Spring,Hibernate和JPA:在entitymanager上调用persist似乎没有提交数据库

我正在尝试使用Hibernate和JPA设置Spring,但是当尝试持久化对象时,似乎没有任何东西添加到数据库中。 使用以下内容: 在AccountManager中,我正在做: @Repository public class AccountManager implements IAccountManager { @PersistenceContext private EntityManager em; /* — 8< — Query methods omitted — 8< — */ public Account storeAccount(Account ac) { ac = em.merge(ac); em.persist(ac); return ac; } } 交流来自: Account ac = new Account(); ac.setId(mostRecent.getId()+1); ac.setUser(user); ac.setName(accName); ac.setDate(new Date()); ac.setValue(0); ac = accountManager.storeAccount(ac); return ac; […]

JPA query.getResultList()?

我使用JPA 1.0: Query query; query = em.createNamedQuery(“getThresholdParameters”); query.setParameter(1, Integer.parseInt(circleId)); List resultList = new ArrayList(); resultList = query.getResultList(); 在这里我得到List ,因此我必须键入将行的所有参数转换为它们各自的类型,这很麻烦。 在JPA 2.0中,有TypedQuery返回类型为1的实体对象指定。 但是当我使用JPA 1时,我无法使用它。 如何获得结果作为我想要的类型的实体对象? 编辑:查询 @Entity @Table(name=”GMA_THRESHOLD_PARAMETERS”) @NamedQuery( name = “getThresholdParameters”, query = “select gmaTh.minNumberOc, gmaTh.minDurationOc, gmaTh.maxNumberIc, gmaTh.maxDurationIc, gmaTh.maxNumberCellId,” + “gmaTh.distinctBnumberRatio, gmaTh.minPercentDistinctBnumber from GmaThresholdParameter gmaTh ” + “where gmaTh.id.circleId=?1 AND gmaTh.id.tspId=?2 AND gmaTh.id.flag=?3 ” )

强制hibernate插入而不选择语句

我试图将一条新记录插入到一​​张我知道手头独特的表格中。 我试过在对象上调用save(),但在执行任何INSERT之前会执行一堆SELECT语句,我不想​​这样做,因为我知道该对象已经是唯一的。 我正在为每个事务打开一个新会话,我可以看到这是一个问题,但这是我的域的约束。 有没有办法强制Hibernate在INSERT之前不做任何SELECT?

javax.persistence.PersistenceException:org.hibernate.PersistentObjectException:传递给persist的分离实体

使用JPA和Hibernate,运行以下代码时出现exception。 我第一次运行它,一切都很顺利,数据插入数据库。 第二次,当数据应该更新时,它会失败: @AdminTx public void processSite(Site site) { FluxBoutiqueMapping mapping = mapper.generateMappingFromUrl(site); Boutique boutique; for (FluxBoutiqueMapping.Boutique fluxBoutique : mapping.getListe().getBoutiques()) { log.error(“Dans la boucle”); boutique = daoAdmin.namedQuerySingle(Boutique.LOAD_BOUTIQUE_BY_IDWEBSC, fluxBoutique.getId()); log.error(“boutique : “+boutique); if (boutique==null) { log.error(“Dans le new”); boutique = new Boutique(); } boutique.setSite(site); boutique.setUrlLogo(fluxBoutique.getLogo()); boutique.setUrlBoutique(fluxBoutique.getUrl()); boutique.setSelected(false); boutique.setIdWebSC(fluxBoutique.getId()); boutique.setDateModification(new Date()); boutiqueDao.persist(boutique); boutique = null; } } […]

Hibernate / JPA是否考虑了transiant修饰符(而不是注释)

我想避免序列化(在JMS / AMF中),但仍然使用JPA / Hibernate保持字段。 transient修饰符是我的朋友吗? @Transient注释和transient修饰符是否相关? java规范精确地指出,瞬态字段不会被系统服务保存到持久存储中。 但是hibernate是一个系统服务吗? (我不这么认为) http://java.sun.com/docs/books/jls/second_edition/html/classes.doc.html#78119 并且java.io.Serialisable接缝指示为序列化调用out.writeObject and in.readObject http://download.oracle.com/javase/1.4.2/docs/api/java/io/Serializable.html 任何见解? 也许我应该写一个快速测试,但我会对一个规范更有信心。 谢谢 !

使用HttpURLConnection的HTTP请求不会重用TCP连接

我已经创建了一个将GET请求发送到URL的应用程序,然后下载该页面的完整内容。 客户端向例如stackoverflow.com发送GET,并将响应转发给解析器,该解析器具有从页面中查找需要随后的GET请求下载的所有源的可靠性。 以下方法用于发送这些GET请求。 连续多次调用,解析器返回的URL。 这些URL中的大多数位于同一主机上,并且应该能够共享TCP连接。 public static void sendGetRequestToSubObject(String RecUrl) { URL url = new URL(recUrl.toString()); URLConnection connection = url.openConnection (); InputStreamReader isr = new InputStreamReader(connection.getInputStream()); } 每次调用此方法时,都会创建一个新的TCP连接(使用TCP 3次握手),然后在该连接上发送GET。 但我想重用TCP连接,以提高性能。 我想,因为每次调用方法时我都会创建一个新的URL对象,这就是它的工作方式…… 也许有人可以帮助我以更好的方式做到这一点? 谢谢!

@JoinFormula和@OneToMany定义 – 糟糕的文档

我有两个关于@JoinFormula和@OneToMany注释的问题: 如何使用@JoinFormula和@OneToMany注释限制结果数量? 如何在表达式中定义id author = id是指Author.id ? Author { @Id private Long id; @OneToMany @JoinFormula(value = “SELECT a FROM Article a WHERE author = id AND schedule < CURRENT_TIMESTAMP()") // limit = 15 private List pastArticles; } 像这样,即使我删除了schedule <子句的一部分,我仍然保持过去的文章为空。 谢谢!