Tag: jpa

JPA中的@Basic(可选= false)vs @Column(nullable = false)

JPA持久性中的@Basic(optional = false)和@Column(nullable = false)什么区别?

如何在使用JPA和Hibernate时selectid生成策略

我正在通过Hibernate参考指南的Id生成部分和“与Hibernate的Java持久性” Hibernate和JPA结合使用的选项有很多。 我正在寻找关于如何select特定的id生成策略的进一步的文档。 我也在寻找引爆点。 例如,hilo策略有望减less争用。 我假设必须有一个与这个select相关的折衷。 我想受到关于权衡的教育。 有没有任何文献可用?

hibernate:“字段ID”没有默认值“

我面对的是我认为是Hibernate的一个简单问题,但无法解决它(Hibernate论坛无法访问肯定不会帮助)。 我有一个简单的类,我想坚持,但不断得到: SEVERE: Field 'id' doesn't have a default value Exception in thread "main" org.hibernate.exception.GenericJDBCException: could not insert: [hibtest.model.Mensagem] at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103) at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91) [ a bunch more ] Caused by: java.sql.SQLException: Field 'id' doesn't have a default value [ a bunch more ] 持久化类的相关代码是: package hibtest.model; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Inheritance; import […]

请解释一下:insertable = false,updatable = false

如果一个字段被注释为insertable=false, updatable=false ,那么这是不是意味着你不能插入值,也不能改变现有的值? 你为什么想这么做? @Entity public class Person { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; @OneToMany(mappedBy="person", cascade=CascadeType.ALL) private List<Address> addresses; } @Entity public class Address { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; @ManyToOne @JoinColumn(name="ADDRESS_FK") @Column(insertable=false, updatable=false) private Person person; }

JPA渴望获取不join

JPA的抓取策略究竟控制着什么? 我无法检测到渴望和懒惰之间的任何区别。 在这两种情况下,JPA / Hibernate不会自动join多对一的关系。 例如:人有一个地址。 一个地址可以属于很多人。 JPA注释的实体类看起来像: @Entity public class Person { @Id public Integer id; public String name; @ManyToOne(fetch=FetchType.LAZY or EAGER) public Address address; } @Entity public class Address { @Id public Integer id; public String name; } 如果我使用JPA查询: select p from Person p where … JPA / Hibernate生成一个SQL查询以从Person表中进行select,然后为每个人生成一个明确的地址查询: select … from Person […]

Java Persistence / JPA:@Column vs @Basic

JPA中的@Column和@Basic注释之间有什么区别? 他们可以一起使用吗? 他们应该一起使用吗? 还是其中一个足够?

JPA getSingleResult()或null

我有一个insertOrUpdate方法插入一个Entity当它不存在或更新它,如果它。 要启用这个function,我必须要findByIdAndForeignKey ,如果返回null insert,如果没有的话更新。 问题是如何检查它是否存在? 所以我试过getSingleResult 。 但它会抛出一个exception,如果 public Profile findByUserNameAndPropertyName(String userName, String propertyName) { String namedQuery = Profile.class.getSimpleName() + ".findByUserNameAndPropertyName"; Query query = entityManager.createNamedQuery(namedQuery); query.setParameter("name", userName); query.setParameter("propName", propertyName); Object result = query.getSingleResult(); if (result == null) return null; return (Profile) result; } 但getSingleResult抛出一个Exception 。 谢谢

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

JPA (Java持久性API)规范有两种不同的方式来指定实体组合键: @IdClass和@EmbeddedId 。 我在我的映射实体上使用了两个注释,但是对于不太熟悉JPA人来说却是一个大混乱。 我只想采用一种方法来指定组合键。 哪一个真的是最好的? 为什么?

JPA:如何将本机查询结果集转换为POJO类集合

我在我的项目中使用JPA。 我来到一个查询,我需要在五个表上进行连接操作。 所以我创build了一个返回五个字段的本地查询。 现在我想将结果对象转换为包含相同的五个string的Java POJO类。 在JPA中有没有办法直接把结果转换成POJO对象列表? 我来到以下解决scheme.. @NamedNativeQueries({ @NamedNativeQuery( name = "nativeSQL", query = "SELECT * FROM Actors", resultClass = db.Actor.class), @NamedNativeQuery( name = "nativeSQL2", query = "SELECT COUNT(*) FROM Actors", resultClass = XXXXX) // <————— problem }) 现在在resultClass中,我们需要提供一个实际的JPA实体吗? 或者我们可以将其转换为任何包含相同列名的JAVA POJO类?

javax.persistence.Query.getResultList()是否可以返回null?

如果是的话,在什么情况下? Javadoc和JPA规范什么也没说。