草庐IT

java - 如何将多个字段分配为实体的主键(使用 JPA)

这个问题在这里已经有了答案:JPAcompositeprimarykey[duplicate](2个答案)关闭9年前。可以通过在JPA中使用@Id批注为其类分配主键。我的问题是,如果一个人不想在他的表中有一个自动生成的键并使用字段(可能不止一个)作为主键怎么办。假设我们有一个包含SSN、NATIONALITY和NAME的人员表。SSN被定义为一个人在他的国家被识别的号码。因此,我们可能在两个不同的国家有两个号码相同的人。该表的主键可以是SSN+NATIONALITY。有什么方法可以使用JPA映射这两个字段并将其映射到对象吗?或者它创建自动生成的id并使用@Id注释的唯一方法CREATE

java - mappedBy 引用未知的目标实体属性 - hibernate 错误

首先,我的类(class):用户packagecom.patpuc.model;importjava.util.List;importjavax.persistence.Column;importjavax.persistence.Entity;importjavax.persistence.Id;importjavax.persistence.OneToMany;importjavax.persistence.Table;importcom.patpuc.model.RolesMap;@Entity@Table(name="users")publicclassUser{@Id@Col

java - JPA - 从 OneToMany 关系中删除一个 child

在@OneToMany关系中,如果我想删除一个child,我是否也需要从parent的集合中明确删除该child,还是只删除该child就足够了?例如,Person和Phone。每个人都有很多电话号码。如果我想删除一个人的一个电话号码就足够了:EntityManager.remove(phone);或者我需要事先这样做:Person.getPhone().remove(phone);更不用说,CascadeType设置为MERGE。 最佳答案 您需要从phones集合中显式删除Phone,仅使用EntityManager删除它是不够

java - 使用 Spring Data JPA 自动转换参数

在我们的实体bean中,我们使用自定义ID格式,其中包括校验和以验证ID是否确实有效。ID看起来像ID827391738979。为了确保所有代码仅使用正确的ID,我们围绕ID字符串创建了一个代码包装器:classID{publicID(Stringid){//parseandverifyID}publicStringtoString(){returnid;}}所有代码都只使用这个ID对象。然而,在我们的实体中,我们将ID定义为String:classSomeEntity{@ColumnprivateStringitsID;}现在我们想使用Spring-Data-JPA通过它的id来查询

java - JPA 标准 : Convert int to String then select from substring of resulting String

我有一个String作为参数(实际上是一个valueOf(anInteger),并且想将它与数据库中int值的子字符串进行比较。这是我的代码:ClinicPatientsclp=null;//GetthecriteriabuilderinstancefromentitymanagerfinalCriteriaBuildercb=getEntityManager().getCriteriaBuilder();//CreatecriteriaqueryandpassthevalueobjectwhichneedstobepopulatedasresultCriteriaQuerycrite

java - Hibernate PersistentSet remove() 操作不起作用

我的父实体中有一个集合,如下所示:ClassParent{@OneToMany(mappedBy=parent,cascade=CasacadeType.ALL)Setchildren;}ClassChild{@Column(nullable=false)@ManyToOneParentparent;}现在,如果我对Set中的其中一个元素执行remove()操作,它实际上并没有被删除。 最佳答案 您的映射应如下所示:publicclassParent{@OneToMany(mappedBy=parent,cascade=Casaca

java - 如何加载实际的 Hibernate 实体关联而不是 LAZY 代理

我来自eclipselink并尝试通过Hibernate工作。假设我们有一个类Car和一个类Wheel。Car类有n个轮子。两个实体都通过双向关联进行连接。更重要的是,在Wheel方面,我有一个Car引用:@ManyToOne(fetch=FetchType.LAZY)@JoinColumn(name="car_id")privateCarcar;加上setter/getter。现在我想使用它的id获取一个轮子。来self的EntityManager(不是hibernateSession)。我像这样初始化EntityManager:EntityManagerFactoryemf=Per

java - Hibernate 5 和类型化条件查询 (JPA2)

问题:1)如果我从Hibernate4.x升级到Hibernate5.x,我是否仍然可以使用“旧”条件查询,或者只能使用新的TypedJPA2条件查询?旧的是否已弃用,或者我可以同时使用两者吗?2)我是否正确理解新的类型化标准迫使我为我拥有的每个实体类创建第二个类,从而重复类的数量?我应该手动创建这些类吗?如果没有,怎么办?咆哮:必须复制类(class)似乎很奇怪,所以我一定是误解了它?这不是矫枉过正和不必要的复杂吗? 最佳答案 不,旧标准API并未弃用。看看thejavadoc:没有弃用警告。但我建议坚持使用标准JPAAPI,而不

java - @ManyToMany 三个表之间的关系

我的SpringJPA应用程序中有三个独立的实体-用户、部门、角色我的数据库中有一个连接表来关联这些实体中的每一个:USER_DEPARTMENT_ROLE我的问题是,如何在我的实体类中定义这种关系?我是否必须在每个单独的实体中定义一个@ManyToMany关系?我知道如何定义两个表之间的这种关系,但对于两个以上的表,我不确定从哪里开始。感谢任何帮助! 最佳答案 如果您在连接表中映射了两个以上的关系,那么我建议创建一个单独的实体,用于映射该特定表。问题是您是否可以有一个不同的id列作为人工主键,或者您必须坚持使用三个外键构建的复合主

java - @NamedNativeQuery 和@SqlResultSetMapping 用于非实体

我一直在用这个post举个例子。我有一个复杂的连接查询(在此处进行了简化)。它从两个表(以及使用CASE的派生列)返回值的子集。我认为我不需要使用实体注释,因为从我的结果集中返回的对象不是我的模式中的实际表。我想保存连接查询结果的非实体对象:@SqlResultSetMapping(name="myMapping",classes={@ConstructorResult(targetClass=CarLimitDelta.class,columns={@ColumnResult(name="caseCol"),@ColumnResult(name="colA"),@ColumnResu