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的。
我已经改了很多次配置了,如果你方便能出手帮写下吗?
相关推荐
本实例将详细探讨JPA中的一对一(OneToOne)关系配置,以及如何在实际项目中实现。 一对一关系在数据库设计中意味着两个实体之间存在一个实体对应另一个实体的唯一关系。例如,一个人可能只有一个护照,或者一个...
4. **复合主键(Composite Primary Keys)**: 当一个实体的主键由两个或更多字段组成时,可以使用`@IdClass`或`@EmbeddedId`注解来定义复合主键。 5. **双向关联(Bidirectional Relationships)**: 在两个实体之间...
JPA(Java Persistence API)是一种 Java 持久层 API,用于处理 Java 对象和关系数据库之间的 Mapping。JPA 查询是 JPA 中的一种重要机制,用于从数据库中检索数据。在本文中,我们将详细介绍 JPA 查询的各种方式,...
本篇文章将聚焦于JPA中的一对一(OneToOne)关联映射的实例配置,这在处理两个实体之间一对一关系时非常有用。 在一对一关联中,一个实体对应另一个实体的唯一实例。这种关系可以通过在实体类中定义注解来实现。JPA...
每个主键字段都需要在复合主键类中声明,并用`@Id`注解。然后,在实体类中,将这个复合主键类作为属性并用`@EmbeddedId`注解。 2. **多对多关联(JPAManyToMany)** 多对多关联表示两个实体之间存在多个实例相互...
在Spring Security的认证流程中,`Authentication`对象扮演着中心角色,其中的`getAuthorities`方法返回一个`GrantedAuthority`对象的数组,表示用户的所有权限。`AuthenticationProvider`接口用于执行具体的认证...
1. **JPACompositePK**:这是一个示例项目,展示了如何在JPA中处理复合主键。复合主键是指一个实体的主键由两个或多个属性组成,这在数据库设计中是常见的。在JPA中,可以通过实现`javax.persistence.Embeddable`...
首先,一对一外键关联指的是一个实体通过外键直接引用另一个实体的主键。在单向关联中,只有其中一个实体知道另一个实体的存在,而另一个实体则无感知。这种关联通常体现在数据库设计中,比如一个用户只有一个账户,...
- **pkJoinColumns**:定义一个 `PrimaryKeyJoinColumn` 数组,用于指定从表的主键列,这些主键列将与主表的主键列建立关联。 - **uniqueConstraints**:定义一个 `UniqueConstraint` 数组,用于设置从表上的唯一...
当中间表除了包含两个关联表的外键之外还有其他字段时,需要创建一个独立的 POJO 类来代表中间表,并使用 `@Embeddable` 和 `@EmbeddedId` 注解来定义复合主键。 **示例代码:** ```java // RoleMember.java @...
JPA是Java平台上的一个标准,用于管理关系数据库中的数据,而Spring Data JPA是Spring Framework的一个模块,它为JPA提供了一个高级的抽象层,简化了数据访问。下面我们将深入探讨Spring Boot集成JPA实现数据库表...
在一对多关系中,"一"端的表通常作为主键持有者,"多"端的表则包含指向"一"端的外键。 在处理这样的关系时,Hibernate提供了多种映射策略,例如使用`@OneToMany`和`@ManyToOne`注解。在"一"端的实体类中,我们可以...
Java 持续性API(JPA)是Java平台上的一个规范,用于处理对象关系映射(ORM),它简化了企业级Java应用中对数据库的访问。JPA允许开发者使用面向对象的编程模型来操作数据库,而无需深入理解底层的SQL语法。在JPA中...
6. **外键(Foreign Key)**:在一对多和多对一的关系中,通常一个实体会持有另一个实体的主键作为外键。在这个例子中,`Address`实体中的`person`属性就是`Person`实体的外键,而`Person`实体则不直接包含`Address`的...
Java Persistence API(JPA)是Java平台上的一个标准,用于管理关系数据库中的对象持久化。它是ORM(对象关系映射)框架的一种实现,允许开发者使用Java对象来操作数据库,而无需编写大量的SQL代码。在JPA中,关系...
- `@Id`:标记实体的一个或多个字段作为主键。 - `@GeneratedValue`:控制主键的生成策略,如序列、自增等。 - `@EmbeddedId` 和 `@IdClass`:用于复合主键的定义。 4. **直接映射批注**: - `@Basic`:基本...
在JPA中,我们将这个关系映射到两个实体:一个是"多"端的实体(如Employee),另一个是"一"端的实体(如Department)。 在Java代码中,我们可以通过以下方式实现单向多对一的映射: 1. **实体定义**: - 在"多"端...
Java持久化API(JPA)是Java平台上的一个规范,作为Java EE 5的一部分,它极大地简化了企业级应用中对象关系映射(ORM)的过程。JPA允许开发者以声明式的方式定义Java对象如何与关系数据库中的表进行映射,从而避免...
在这种关系中,一个实体只有一个对应实体与之关联,且只在一个方向上有引用。通常通过`@OneToOne`注解来实现,可以设置`mappedBy`属性来指定对方实体中的关联字段。 2. **双向一对一**: 双向一对一关系意味着两...
3. **@Id**: 定义实体类中的属性为主键字段,每个实体至少有一个主键。默认情况下,JPA会尝试寻找名为"id"的属性作为主键。 4. **@GeneratedValue**: 与@Id配合使用,用于定义主键的生成策略。例如,可以设置为`...