`
- 浏览:
9995 次
- 性别:
- 来自:
北京
-
hibernate复合(联合)主键的做关联类的例子
- public class Station implements java.io.Serializable {
- // Fields
- private Integer stationId;
private String stationName;
private Set stationRecords = new HashSet();
- // Constructors
- public Set getStationRecords() {
return stationRecords;
}
- public void setStationRecords(Set stationRecords) {
this.stationRecords = stationRecords;
}
- /** default constructor */
public Station() {
}
- /** full constructor */
public Station(String stationName) {
this.stationName = stationName;
}
- // Property accessors
- public Integer getStationId() {
return this.stationId;
}
- public void setStationId(Integer stationId) {
this.stationId = stationId;
}
- public String getStationName() {
return this.stationName;
}
- public void setStationName(String stationName) {
this.stationName = stationName;
}
- public void stationDev(Dev dev) {
RecordId id = new RecordId();
id.setStation(this);
id.setDev(dev);
Record record = new Record();
record.setId(id);
record.setRecordTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
.format(new Date()));
stationRecords.add(record);
}
- public void removeRecord(Record record) {
stationRecords.remove(record);
}
- }
- public class Dev implements java.io.Serializable {
- // Fields
- private Integer devId;
private String devName;
private Set devRecords = new HashSet();
- // Constructors
- /** default constructor */
public Dev() {
}
- /** full constructor */
public Dev(String devName) {
this.devName = devName;
}
- // Property accessors
- public Integer getDevId() {
return this.devId;
}
- public void setDevId(Integer devId) {
this.devId = devId;
}
- public String getDevName() {
return this.devName;
}
- public void setDevName(String devName) {
this.devName = devName;
}
- public Set getDevRecords() {
return devRecords;
}
- public void setDevRecords(Set devRecords) {
this.devRecords = devRecords;
}
- }
- public class RecordId implements java.io.Serializable {
- // Fields
- private Station station;
- private Dev dev;
- // Constructors
- /** default constructor */
public RecordId() {
}
- // Property accessors
- public Station getStation() {
return station;
}
- public void setStation(Station station) {
this.station = station;
}
- public Dev getDev() {
return dev;
}
- public void setDev(Dev dev) {
this.dev = dev;
}
- public boolean equals(Object obj) {
return (obj instanceof RecordId)
&& (this.getStation().equals(((RecordId) obj).getStation()))
&& (this.getDev().equals(((RecordId) obj).getDev()));
}
- public int hashCode() {
return this.getStation().hashCode() ^ this.getDev().hashCode();
}
- }
- public class Record implements java.io.Serializable {
- // Fields
- private RecordId id;
private String recordTime;
- // Constructors
- /** default constructor */
public Record() {
}
- /** full constructor */
public Record(RecordId id, String recordTime) {
this.id = id;
this.recordTime = recordTime;
}
- // Property accessors
- public RecordId getId() {
return this.id;
}
- public void setId(RecordId id) {
this.id = id;
}
- public String getRecordTime() {
return this.recordTime;
}
- public void setRecordTime(String recordTime) {
this.recordTime = recordTime;
}
- }
- Station.hbm.xml
- <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="com..bean.Station" table="Station" schema="dbo" catalog="test">
<id name="stationId" type="java.lang.Integer">
<column name="StationId" />
<generator class="native" />
</id>
<property name="stationName" type="java.lang.String">
<column name="StationName" length="50" not-null="true" />
</property>
<set name="stationRecords" inverse="true" lazy="true" cascade="all-delete-orphan">
<key column="stationId" />
<one-to-many class="com.dpc.bean.Record"/>
</set>
</class>
</hibernate-mapping>
- Dev.hbm.xml
- <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="com.bean.Dev" table="Dev" schema="dbo" catalog="test">
<id name="devId" type="java.lang.Integer">
<column name="DevId" />
<generator class="native" />
</id>
<property name="devName" type="java.lang.String">
<column name="DevName" length="50" not-null="true" />
</property>
<set name="devRecords" inverse="false" lazy="true" cascade="all-delete-orphan">
<key column="DevId" />
<one-to-many class="com.dpc.bean.Record"/>
</set>
</class>
</hibernate-mapping>
- Record.hbm.xml
- <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="com.bean.Record" table="Record" schema="dbo"
catalog="test">
<composite-id name="id" class="com.dpc.bean.RecordId"
unsaved-value="any">
<key-many-to-one name="station" column="StationId"
class="com.dpc.bean.Station" />
<key-many-to-one name="dev" column="DevId"
class="com.dpc.bean.Dev" />
</composite-id>
<property name="recordTime" type="java.lang.String">
<column name="RecordTime" not-null="true" />
</property>
</class>
</hibernate-mapping>
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
在本例中,我们将通过一个简单的复合主键的做关联类的例子来说明 Hibernate 复合主键的使用。 复合主键的定义 在 Java 中,复合主键类需要实现 equals 方法和 Serializable 接口。例如,RecordId 类就是一个复合...
这里,`@Embeddable`注解告诉Hibernate这是一个可以嵌入到其他实体中的类,它将作为复合主键的一部分。 然后,在包含复合主键的实体类中,我们需要使用`@EmbeddedId`注解: ```java import javax.persistence....
这里,`Order`实体类通过`@EmbeddedId`注解关联了`OrderKey`复合主键类。 3. **映射到数据库的SQL语句** 在无主键表映射的情况下,数据库中的表应该没有明确的`PRIMARY KEY`约束,而是依赖于复合主键字段的唯一性。...
在示例中,我们有一个`UserRolePK`类,用于表示用户角色关联的复合主键。这个类需要实现`Serializable`接口,因为所有主键都必须是可序列化的,以便于JPA处理。此外,为了确保两个`UserRolePK`对象是否相等,我们...
然后,我们看到一个基于主键类的复合主键持久化类`User2`。在这个例子中,`User2`类包含了一个`UserPk`类型的属性`userpk`,表示主键对象。这样做的好处是,可以将主键作为一个独立的对象来处理,增强了代码的可读性...
在某些情况下,两个实体可能共享一个主键,这被称为复合主键。在Hibernate中,可以使用`@PrimaryKeyJoinColumn`注解来配置这种关联。 总结,Hibernate的一对一关联映射为我们提供了灵活的方式来处理数据库中的一对...
- 一对一关系通常要求一方为主键,另一方为外键,但也可以设计成两者都是主键,这被称为复合主键。 - 需要确保数据库表结构与实体类的映射一致,包括外键约束等。 通过以上步骤,我们可以成功地在Hibernate中建立...
### Hibernate复合组件 复合组件(Composite Element)是指一个实体类中包含其他实体类的复杂结构。在数据库中,这可能表现为一个表中的某些列实际上是由另一个表的数据组成。在Hibernate中,可以使用`@Embeddable`...
- `<composite-id>` 标签用于定义复合主键,其中包含两个 `<key-property>` 标签,每个 `<key-property>` 定义了一个主键字段。 #### 四、双主键、有外键的Hibernate配置实例 复合主键同时包含外键的情况也是比较...
8. **高级特性**:书中还涵盖了如继承映射、多态性、集合映射、联合主键、复合主键等复杂场景的处理方法,以及如何使用Hibernate的事件监听器和拦截器。 9. **最佳实践**:书中包含了许多最佳实践,帮助开发者避免...
- **8.4 组件作为联合标识符 (Components as composite identifiers)**:说明如何将组件用作复合主键的一部分。 - **8.5 动态组件 (Dynamic components)**:介绍动态组件映射的实现方式。 #### 9. 继承映射 ...
本章通过简单的helloapp应用例子,演示如何利用Hibernate来持久化Java对象。 3.1 创建Hibernate的配置文件 47 3.2 创建持久化类 48 3.3 创建数据库Schema 51 3.4 创建对象-关系映射文件 52 3.4.1 映射文件的...
12. **高级特性**:涵盖集合映射、复合主键、双向关联、自动生成SQL、查询结果转换为自定义类型等高级主题。 13. **案例分析**:通过实际项目中的例子,演示如何运用Hibernate解决具体问题,分享作者在咨询项目中的...
- **composite-id联合ID**:当实体类具有多个主键字段时的映射方法。 - **识别器(discriminator)**:用于区分继承体系中的不同子类。 - **版本(version)**:乐观锁实现策略之一。 - **时间戳(timestamp)**...