hib一对一 实例

本文介绍了一对一关联在Hibernate中的实现方法,包括Card和Dossier两个类的设计、映射文件配置及页面展示技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Card:主

Dossier子,一对一关系:

model和映射文件:


package cn.tr.model;

/**
 *
 */
public class Card implements java.io.Serializable{
 private String cardId;
 private String cardCode;
 private String diseaseId;
 
 private Dossier dossier;
 public Card() {
 }
 public Card(String cardCode) {
  this.cardCode = cardCode;
 }
 public String getCardId() {
  return cardId;
 }
 public void setCardId(String cardId) {
  this.cardId = cardId;
 }
 public String getCardCode() {
  return cardCode;
 }
 public void setCardCode(String cardCode) {
  this.cardCode = cardCode;
 }
 public String getDiseaseId() {
  return diseaseId;
 }
 public void setDiseaseId(String diseaseId) {
  this.diseaseId = diseaseId;
 }                   
 public Dossier getDossier() {
  return dossier;
 }
 public void setDossier(Dossier dossier) {
  this.dossier = dossier;
 }

}


package cn.tr.model;

import java.util.Date;

/**
 */
public class Dossier implements java.io.Serializable{
 private String dossierId;
 private Date dtRegister;
 private String doctor;
 private Card card;
 public String getDossierId() {
  return dossierId;
 }
 public void setDossierId(String dossierId) {
  this.dossierId = dossierId;
 }
 public Date getDtRegister() {
  return dtRegister;
 }
 public void setDtRegister(Date dtRegister) {
  this.dtRegister = dtRegister;
 }
 public String getDoctor() {
  return doctor;
 }
 public void setDoctor(String doctor) {
  this.doctor = doctor;
 }
 public Card getCard() {
  return card;
 }
 public void setCard(Card card) {
  this.card = card;
 }
 
}

<hibernate-mapping>
    <class name="cn.tr.model.Card" table="card" schema="MYORACLEDB">
        <id name="cardId" type="java.lang.String">
            <column name="card_id" length="40" />
              <generator class="uuid">
            </generator>
        </id>    
        <property name="cardCode" type="java.lang.String">
            <column name="card_code" />
        </property>
        <property name="diseaseId" type="java.lang.String">
            <column name="disease_id" />
        </property>      
  
   <!--many-to-one 加unique=“true”来做一对一关联-->
      <one-to-one name="Dossier" class="cn.tr.model.Dossier" property-ref="card" cascade="all" outer-join="true">
    </one-to-one>
    </class>
</hibernate-mapping>

<hibernate-mapping>
    <class name="cn.tr.model.Dossier" table="dossier" schema="MYORACLEDB">
        <id name="dossierId" type="java.lang.String">
            <column name="dossier_id" length="40" />
              <generator class="uuid">
            </generator>
        </id>
        <property name="dtRegister" type="java.util.Date">
            <column name="dt_register"/>
        </property>
        <property name="doctor" type="java.lang.String">
            <column name="doctor"/>
        </property>
    <!--many-to-one 加unique=“true”实现一对一关联-->
       <many-to-one name="card" column="card_id" class="cn.tr.model.Card"
   cascade="save-update" unique="true" >
     </many-to-one>
    
    </class>
</hibernate-mapping>


outer-join="true"  表示使用外键关联,默认的是使用主键关联;

 

Action、Service、Dao只像单表操作一样就行,不用任何额外的配置;

 

jsp页面上:

property="dossier.dtRegister",录入子;

property="dossier.card.cardCode",这样即可通过子的录入页面,录入主的信息

另外,记得在页面上隐藏一下主键,否则修改时可能会报错。

 

 如果通过主的页面录入子,则需要把Card.java类修改一下,否则子存不上主的主键

 public void setDossier(Dossier dossier) {
  this.dossier = dossier;

  if(dossier!= null){
   dossier.setCard(this);
  }
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值