笔者在使用hibernate注解时需要建一个表关联
通过本次建表收获了一些意外的心得
1、在使用@OneToOne注解时数据库相应表中不必有外键
2、注解必须写在一致的位置上,即要么全写在实体的字段上,要么全部写在get方法上
3、当要做冗余时;即在数据字段中要多建一个所参考的外键表的主键字段需要设置其中一个字段为不可写和不可更新
一般console报错误为:Repeated column in mapping for entity: net.shopxx.qzhprp.entity.GpPpDeployAccessories column: component_id (should be mapped with insert="false" update="false")
解决办法为:添加注解如, @JoinColumn(name = "componentId",referencedColumnName="SEQ_ID",insertable=false,updatable=false)
具体参考一下例子(example):
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;
/**
*
* 中文名: 选购配件
* 表名: [shopxx3 (shopxx3)].[GP_PP_DEPLOY_ACCESSORIES]
* @author Zhang Xiaopeng
* @version 1.0
* @date 2013/10/21 21:01:01
*/
@Entity
@Table(name="GP_PP_DEPLOY_ACCESSORIES")
public class GpPpDeployAccessories {
// ------------------------------ FIELDS ------------------------------
/** seq_id(NUMBER(36)) */
private String seqId;
/** (NUMBER(36)) */
private String productId;
/** (VARCHAR2(100)) */
private String componentInformation;
/** (NUMBER(8,2)) */
private Double price;
/** (NUMBER(36)) */
private String accesoryId;
/** (char(36)) */
private String componentId;
/** (DATE) */
private Date createDate;
/** (DATE) */
private Date modifyDate;
/** 是否标配 */
private String isStandard;
/** 购物车键 */
private String cartKey;
/** 组件 */
private GpPpComponent gpPpComponent;
/** 配件 */
private GpPpAccessory GpPpAccessory;
// --------------------- GETTER / SETTER METHODS ---------------------
/**
* @return seq_id(NUMBER(36))
*/
@Id
@Column(name = "SEQ_ID", nullable = false)
public String getSeqId() {
return seqId;
}
/**
* @param seqId seq_id(NUMBER(36))
*/
public void setSeqId(String seqId) {
this.seqId = seqId;
}
/**
* @return (NUMBER(36))
*/
public String getProductId() {
return productId;
}
/**
* @param productId (NUMBER(36))
*/
public void setProductId(String productId) {
this.productId = productId;
}
/**
* @return (VARCHAR2(100))
*/
public String getComponentId() {
return componentId;
}
/**
* @param componentId (VARCHAR2(100))
*/
public void setComponentId(String componentId) {
this.componentId = componentId;
}
/**
* @return (VARCHAR2(100))
*/
public String getComponentInformation() {
return componentInformation;
}
/**
* @param componentInformation (VARCHAR2(100))
*/
public void setComponentInformation(String componentInformation) {
this.componentInformation = componentInformation;
}
/**
* @return (NUMBER(8,2))
*/
public Double getPrice() {
return price;
}
/**
* @param price (NUMBER(8,2))
*/
public void setPrice(Double price) {
this.price = price;
}
/**
* @return (NUMBER(36))
*/
public String getAccesoryId() {
return accesoryId;
}
/**
* @param accesoryId (NUMBER(36))
*/
public void setAccesoryId(String accesoryId) {
this.accesoryId = accesoryId;
}
/**
* @return (DATE)
*/
public Date getCreateDate() {
return createDate;
}
/**
* @param createDate (DATE)
*/
public void setCreateDate(Date createDate) {
this.createDate = createDate;
}
public void setCreateDate(String createDate) {
DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
try {
this.createDate = df.parse(createDate);
} catch (Exception e) {
System.err.println(e.getMessage()+ e.getStackTrace());
}
}
public String getIsStandard() {
return isStandard;
}
public void setIsStandard(String isStandard) {
this.isStandard = isStandard;
}
public String getCartKey() {
return cartKey;
}
public void setCartKey(String cartKey) {
this.cartKey = cartKey;
}
/**
* @return (DATE)
*/
public Date getModifyDate() {
return modifyDate;
}
/**
* @param modifyDate (DATE)
*/
public void setModifyDate(Date modifyDate) {
this.modifyDate = modifyDate;
}
public void setModifyDate(String modifyDate) {
DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
try {
this.modifyDate = df.parse(modifyDate);
} catch (Exception e) {
System.err.println(e.getMessage()+ e.getStackTrace());
}
}
@OneToOne(cascade=CascadeType.ALL)
@JoinColumn(name = "componentId",referencedColumnName="SEQ_ID",insertable=false,updatable=false)
public GpPpComponent getGpPpComponent() {
return gpPpComponent;
}
public void setGpPpComponent(GpPpComponent gpPpComponent) {
this.gpPpComponent = gpPpComponent;
}
@OneToOne(cascade=CascadeType.ALL)
@JoinColumn(name = "accesoryId",referencedColumnName="SEQ_ID",insertable=false,updatable=false)
public GpPpAccessory getGpPpAccessory() {
return GpPpAccessory;
}
public void setGpPpAccessory(GpPpAccessory gpPpAccessory) {
GpPpAccessory = gpPpAccessory;
}
}
相关推荐
在Hibernate中,一对一关联可以通过配置XML映射文件或者使用注解来实现。我们先来看XML映射文件的例子。假设我们有两个实体,一个是`User`,另一个是`Account`,`User`实体拥有对`Account`的引用。在`User.hbm.xml`...
在Hibernate的源码中,`OneToOne`注解会被`org.hibernate.cfg.annotations.EntityBinder`类处理。这个类会解析注解,构建`JoinColumn`对象,并将其添加到元数据中,以便在SQL生成和查询过程中使用。 ### 六、性能...
综上所述,Hibernate的一对一关联映射通过注解方式提供了便捷的数据库表与Java对象之间的绑定,理解并正确使用这些注解对于优化数据访问性能、保证数据一致性至关重要。在设计数据库模型时,应充分考虑实体之间的...
双向关联表映射类似一对一外键映射的双向关系,需要在两个实体类中定义`@OneToOne`并使用`mappedBy`。 5. **一对一主键关联映射(单向)** 主键关联映射中,一个实体的主键直接作为另一个实体的主键。这通过`@...
综上所述,Hibernate双向一对一关联映射是通过注解实现的数据库表之间的关系映射,它提高了代码的可读性和可维护性。正确理解和运用这一技术,对于构建高效、灵活的Java应用程序至关重要。在实际开发中,要结合具体...
本文档将深入探讨Hibernate注解的使用,帮助开发者更好地理解和利用这些注解来实现对象关系映射(ORM)。 一、Hibernate注解基础 Hibernate注解是一种元数据方式,用于在Java类和属性上声明数据库映射信息,从而...
* 双线一对一映射:基于外键使用 @OneToOne 注解,基于主键使用 Hibernate 的扩展注解。 在映射关联关系时,需要注意以下几点: * mappedBy 属性:用在双向关联中,把关系的维护权反转。 * cascade 属性:指定级联...
本主题将深入探讨Hibernate注解的相关知识点。 1. **注解概述**: 注解(Annotations)是Java 5引入的一种元数据,它提供了在源代码中嵌入信息的方式,这些信息可以被编译器或者在运行时的Java虚拟机使用。在...
在Hibernate中,这通常通过在映射文件或注解中设置`@OneToOne`和`@PrimaryKeyJoinColumn`实现。 2. 实现方式: - XML配置:在实体类的映射文件中,使用`<one-to-one>`元素,并指定`class`属性为关联实体的全限定名...
多对多的关联关系可以使用`@ManyToMany`注解,Hibernate会自动创建一个中间表来存储两个实体类之间的关联。如果需要自定义中间表的名称或字段,可以使用`@JoinTable`注解。在双向多对多关联中,依然需要`mappedBy`来...
**一、Hibernate注解基础** 1. `@Entity`: 这个注解标记一个类为实体类,表示这个类将映射到数据库中的一个表。例如: ```java @Entity public class User { // ... } ``` 2. `@Table`: 定义实体对应的数据库表名...
在Hibernate中,注解是用于替代传统的XML配置文件,以元数据的形式标注在类、属性或者方法上,实现对象与数据库表之间的映射。本文将深入探讨Hibernate中的注解,帮助你更好地理解和应用它们。 1. **实体注解(@...
在Java的持久化框架中,Hibernate是一个非常流行的ORM(对象关系映射...通过上述内容,你应该对使用Hibernate注解实现一对一主键关联有了清晰的理解。在实际项目中,可以根据具体需求调整关联策略,优化数据访问效率。
Hibernate注解是将ORM元数据嵌入到Java类和属性的声明中,以声明式的方式定义实体、关联、列等信息。通过使用注解,开发者可以避免编写大量的XML配置文件,提高开发效率。 1.2 支持的注解 Hibernate提供了丰富的...
在Java的持久化框架Hibernate中,一对一(One-to-One)映射是一种常见关系映射,用于表示两个实体之间一对一的关联。本篇文章将详细探讨Hibernate中实现一对一映射的两种方式,并结合源码分析其原理。 一、主键外键...
在Java的持久化框架Hibernate中,注解是用于对象关系映射(ORM)的重要工具,它简化了传统XML配置的方式,使代码更加简洁、易读。本篇文章将深入探讨Hibernate中注解的一对多、多对多和一对一关系映射。 ### 一对多...
在 Hibernate 中,注解是一种简洁且强大的工具,用于替代传统的 XML 配置文件来描述对象模型和数据库之间的映射关系。这篇文档将深入探讨 Hibernate 注解的使用。 ### 第 1 章 创建一个注解项目 在开始使用 ...
通过阅读博客文章,你可以看到具体示例和详细的配置步骤,这将有助于加深对Hibernate注解关联的理解。同时,实践操作可以帮助巩固理论知识,确保你能灵活地应用于实际项目中。 总之,掌握Hibernate的注解关联配置是...
`@OneToOne`注解用于标记一对一关联,`mappedBy`属性指明了被引用的一方,`@JoinColumn`定义了外键列名。 **三、映射策略** 1. **外键策略(ForeignKey)** 通常,一方实体(如`Person`)中会有一个外键字段指向...