0 0

JPA复合主键其中一个作为外键,不再新建一个外键列的配置?10

CREATE TABLE `orders` (
  `orderId` varchar(14) NOT NULL,
  `address` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`orderId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `orderitem` (
  `orderId` varchar(14) NOT NULL,
  `orderItemId` varchar(4) NOT NULL,
  `num` int(11) DEFAULT NULL
  PRIMARY KEY (`orderId`,`orderItemId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

orderitem双PK,orderId是orders的外键

Caused by: org.hibernate.MappingException: Repeated column in mapping for entity: cn.it.entity.OrderItem column: orderId (should be mapped with insert="false" update="false")
如下配置报column重复的异常,求高人帮助

@Entity
@Table(name="orders")
public class Order implements Serializable
{
private String orderId;
private String address;
private Set<OrderItem> items = new HashSet<OrderItem>();

@Id
@Column(length=14)
public String getOrderId()
{
return orderId;
}
...

@Column(length=50)
public String getAddress()
{
return address;
}
....

@OneToMany(mappedBy="order",cascade={CascadeType.PERSIST,CascadeType.MERGE,CascadeType.REMOVE})
public Set<OrderItem> getOrderItems()
{
return items;
}
}

@Entity
public class OrderItem implements Serializable
{
private OrderItemPK id;
private Order order;
private int num;

@EmbeddedId
public OrderItemPK getId()
{
return id;
}
...

@ManyToOne(cascade={CascadeType.MERGE,CascadeType.REFRESH})
  @JoinColumn(name="orderId")
public Order getOrder()
{
return order;
}
...
}

@Embeddable
public class OrderItemPK implements Serializable
{
private String orderId;
private String orderItemId;

....
}

问题补充:
linyuanci 写道
哥哥,OrderItem实体的Order对象删了,放在OrderItemPK 实体里面配置

你的意思是这样吗?报下面的错
@Embeddable
public class OrderItemPK implements Serializable
{
private String orderId;
private String orderItemId;
private Orders orders;
@ManyToOne(cascade={CascadeType.MERGE,CascadeType.REFRESH})
@JoinColumn(name="orderId")
public Orders getOrders()
{
return orders;
}
}

mappedBy reference an unknown target entity property: cn.it.entity.OrderItem.orders in cn.it.entity.Orders.orderItems

方便时能帮写下吗?

问题补充:
linyuanci 写道
哥哥,自动动手,本来就是1对1,你干嘛配制成多对1了,

怎么回是1to1那?order下会有多个item的。

我已经改了很多次配置了,如果你方便能出手帮写下吗?
2012年3月07日 20:49

2个答案 按时间排序 按投票排序

0 0

哥哥,自动动手,本来就是1对1,你干嘛配制成多对1了,

2012年3月08日 14:29
0 0

哥哥,OrderItem实体的Order对象删了,放在OrderItemPK 实体里面配置

2012年3月08日 09:52

相关推荐

    JPA一对一关系实例配置

    本实例将详细探讨JPA中的一对一(OneToOne)关系配置,以及如何在实际项目中实现。 一对一关系在数据库设计中意味着两个实体之间存在一个实体对应另一个实体的唯一关系。例如,一个人可能只有一个护照,或者一个...

    实用JPA开发指南----jpa核心技术(关联关系等的配置高级配置)

    4. **复合主键(Composite Primary Keys)**: 当一个实体的主键由两个或更多字段组成时,可以使用`@IdClass`或`@EmbeddedId`注解来定义复合主键。 5. **双向关联(Bidirectional Relationships)**: 在两个实体之间...

    jpa查询详解

    JPA(Java Persistence API)是一种 Java 持久层 API,用于处理 Java 对象和关系数据库之间的 Mapping。JPA 查询是 JPA 中的一种重要机制,用于从数据库中检索数据。在本文中,我们将详细介绍 JPA 查询的各种方式,...

    JPA 一对一实例配置

    本篇文章将聚焦于JPA中的一对一(OneToOne)关联映射的实例配置,这在处理两个实体之间一对一关系时非常有用。 在一对一关联中,一个实体对应另一个实体的唯一实例。这种关系可以通过在实体类中定义注解来实现。JPA...

    JPA实体关联(hibernate实现)

    每个主键字段都需要在复合主键类中声明,并用`@Id`注解。然后,在实体类中,将这个复合主键类作为属性并用`@EmbeddedId`注解。 2. **多对多关联(JPAManyToMany)** 多对多关联表示两个实体之间存在多个实例相互...

    2spring security+jpa外键关联学习笔记1

    在Spring Security的认证流程中,`Authentication`对象扮演着中心角色,其中的`getAuthorities`方法返回一个`GrantedAuthority`对象的数组,表示用户的所有权限。`AuthenticationProvider`接口用于执行具体的认证...

    JPA 黎活明JPA视频代码

    1. **JPACompositePK**:这是一个示例项目,展示了如何在JPA中处理复合主键。复合主键是指一个实体的主键由两个或多个属性组成,这在数据库设计中是常见的。在JPA中,可以通过实现`javax.persistence.Embeddable`...

    Hibernate 一对一外键单向关联

    首先,一对一外键关联指的是一个实体通过外键直接引用另一个实体的主键。在单向关联中,只有其中一个实体知道另一个实体的存在,而另一个实体则无感知。这种关联通常体现在数据库设计中,比如一个用户只有一个账户,...

    Hibernate4之JPA规范配置详解

    - **pkJoinColumns**:定义一个 `PrimaryKeyJoinColumn` 数组,用于指定从表的主键列,这些主键列将与主表的主键列建立关联。 - **uniqueConstraints**:定义一个 `UniqueConstraint` 数组,用于设置从表上的唯一...

    JPA映射关系详解javax JPA JPA映射关系 JPA映射

    当中间表除了包含两个关联表的外键之外还有其他字段时,需要创建一个独立的 POJO 类来代表中间表,并使用 `@Embeddable` 和 `@EmbeddedId` 注解来定义复合主键。 **示例代码:** ```java // RoleMember.java @...

    springboot集成jpa代码,自动生成表

    JPA是Java平台上的一个标准,用于管理关系数据库中的数据,而Spring Data JPA是Spring Framework的一个模块,它为JPA提供了一个高级的抽象层,简化了数据访问。下面我们将深入探讨Spring Boot集成JPA实现数据库表...

    Hibernate期末作业一对多(主外键)

    在一对多关系中,"一"端的表通常作为主键持有者,"多"端的表则包含指向"一"端的外键。 在处理这样的关系时,Hibernate提供了多种映射策略,例如使用`@OneToMany`和`@ManyToOne`注解。在"一"端的实体类中,我们可以...

    JPA标签(注解)详细说明

    Java 持续性API(JPA)是Java平台上的一个规范,用于处理对象关系映射(ORM),它简化了企业级Java应用中对数据库的访问。JPA允许开发者使用面向对象的编程模型来操作数据库,而无需深入理解底层的SQL语法。在JPA中...

    JPA中,多个表相关联设定的方法。

    6. **外键(Foreign Key)**:在一对多和多对一的关系中,通常一个实体会持有另一个实体的主键作为外键。在这个例子中,`Address`实体中的`person`属性就是`Person`实体的外键,而`Person`实体则不直接包含`Address`的...

    JPA一对一,一对多,多对多关系映射

    Java Persistence API(JPA)是Java平台上的一个标准,用于管理关系数据库中的对象持久化。它是ORM(对象关系映射)框架的一种实现,允许开发者使用Java对象来操作数据库,而无需编写大量的SQL代码。在JPA中,关系...

    JPA详细文档(JPA 批注参考)

    - `@Id`:标记实体的一个或多个字段作为主键。 - `@GeneratedValue`:控制主键的生成策略,如序列、自增等。 - `@EmbeddedId` 和 `@IdClass`:用于复合主键的定义。 4. **直接映射批注**: - `@Basic`:基本...

    jpa--9.单向多对一

    在JPA中,我们将这个关系映射到两个实体:一个是"多"端的实体(如Employee),另一个是"一"端的实体(如Department)。 在Java代码中,我们可以通过以下方式实现单向多对一的映射: 1. **实体定义**: - 在"多"端...

    JPA全面讲解

    Java持久化API(JPA)是Java平台上的一个规范,作为Java EE 5的一部分,它极大地简化了企业级应用中对象关系映射(ORM)的过程。JPA允许开发者以声明式的方式定义Java对象如何与关系数据库中的表进行映射,从而避免...

    jpa的实体映射关系7种

    在这种关系中,一个实体只有一个对应实体与之关联,且只在一个方向上有引用。通常通过`@OneToOne`注解来实现,可以设置`mappedBy`属性来指定对方实体中的关联字段。 2. **双向一对一**: 双向一对一关系意味着两...

    jpa标注中文文档html格式

    3. **@Id**: 定义实体类中的属性为主键字段,每个实体至少有一个主键。默认情况下,JPA会尝试寻找名为"id"的属性作为主键。 4. **@GeneratedValue**: 与@Id配合使用,用于定义主键的生成策略。例如,可以设置为`...

Global site tag (gtag.js) - Google Analytics