【hibernate】映射可嵌入式组件

【hibernate】映射可嵌入式组件

转载:https://www.cnblogs.com/yangchongxing/p/10376452.html

可嵌入 Address 类,没有对应的数据表

复制代码
package cn.ycx.study.hibernate.entity;
import javax.persistence.Column;
import javax.persistence.Embeddable;
import javax.validation.constraints.NotNull;
@Embeddable
public class Address {
    @NotNull
    @Column(nullable=false)
    protected String street;
    @NotNull
    @Column(nullable=false)
    protected String zipcode;
    public String getStreet() {
        return street;
    }
    public void setStreet(String street) {
        this.street = street;
    }
    public String getZipcode() {
        return zipcode;
    }
    public void setZipcode(String zipcode) {
        this.zipcode = zipcode;
    }
}
复制代码

1、映射可嵌入组件

复制代码
package cn.ycx.study.hibernate.entity;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
@org.hibernate.annotations.DynamicInsert
@org.hibernate.annotations.DynamicUpdate
public class User {
    @Id
    @GeneratedValue(generator="id_generator")
    protected long id;
    protected String username;
    //嵌入式组件
    protected Address address;
    public long getId() {
        return id;
    }
    public void setId(long id) {
        this.id = id;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public Address getAddress() {
        return address;
    }
    public void setAddress(Address address) {
        this.address = address;
    }
}
复制代码

产生的数据库表

复制代码
CREATE TABLE `user` (
    `id` BIGINT(20) NOT NULL,
    `street` VARCHAR(255) NOT NULL,
    `zipcode` VARCHAR(255) NOT NULL,
    `username` VARCHAR(255) NULL DEFAULT NULL,
    PRIMARY KEY (`id`)
)
COLLATE='utf8mb4_general_ci'
ENGINE=InnoDB
;
复制代码

2、重写映射可嵌入组件

复制代码
package cn.ycx.study.hibernate.entity;

import javax.persistence.AttributeOverride;
import javax.persistence.AttributeOverrides;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
@org.hibernate.annotations.DynamicInsert
@org.hibernate.annotations.DynamicUpdate
public class User {
    @Id
    @GeneratedValue(generator="id_generator")
    protected long id;
    protected String username;
    //嵌入式组件
    protected Address address;
    @AttributeOverrides({
        @AttributeOverride(
            name = "street", 
            column = @Column(name = "order_street")
        ),
        @AttributeOverride(
            name = "zipcode",
            column = @Column(name = "order_zipcode")
        )
    })
    protected Address orderAddress;
    public long getId() {
        return id;
    }
    public void setId(long id) {
        this.id = id;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public Address getAddress() {
        return address;
    }
    public void setAddress(Address address) {
        this.address = address;
    }
    public Address getOrderAddress() {
        return orderAddress;
    }
    public void setOrderAddress(Address orderAddress) {
        this.orderAddress = orderAddress;
    }
}
复制代码

产生的数据库表

复制代码
CREATE TABLE `user` (
    `id` BIGINT(20) NOT NULL,
    `street` VARCHAR(255) NOT NULL,
    `zipcode` VARCHAR(255) NOT NULL,
    `order_street` VARCHAR(255) NULL DEFAULT NULL,
    `order_zipcode` VARCHAR(255) NULL DEFAULT NULL,
    `username` VARCHAR(255) NULL DEFAULT NULL,
    PRIMARY KEY (`id`)
)
COLLATE='utf8mb4_general_ci'
ENGINE=InnoDB
;
复制代码

3、映射嵌套的可嵌入组件

可嵌入 Address 类中嵌套 City 类

复制代码
package cn.ycx.study.hibernate.entity;
import javax.persistence.Column;
import javax.persistence.Embeddable;
import javax.validation.constraints.NotNull;
@Embeddable
public class Address {
    @NotNull
    @Column(nullable=false)
    protected String street;
    @NotNull
    @Column(nullable=false)
    protected String zipcode;
    public String getStreet() {
        return street;
    }
    @NotNull
    protected City city;
    
    public void setStreet(String street) {
        this.street = street;
    }
    public String getZipcode() {
        return zipcode;
    }
    public void setZipcode(String zipcode) {
        this.zipcode = zipcode;
    }
    public City getCity() {
        return city;
    }
    public void setCity(City city) {
        this.city = city;
    }
}
复制代码

嵌套 City 类

复制代码
package cn.ycx.study.hibernate.entity;

import javax.persistence.Column;
import javax.persistence.Embeddable;
import javax.validation.constraints.NotNull;

@Embeddable
public class City {
    @NotNull
    @Column(nullable=false)
    protected String country;
    
    @NotNull
    @Column(nullable=false)
    protected String name;
    
    public String getCountry() {
        return country;
    }
    public void setCountry(String country) {
        this.country = country;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}
复制代码

用户表

复制代码
package cn.ycx.study.hibernate.entity;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
@org.hibernate.annotations.DynamicInsert
@org.hibernate.annotations.DynamicUpdate
public class User {
    @Id
    @GeneratedValue(generator="id_generator")
    protected long id;
    protected String username;
    //可嵌入式组件
    protected Address address;
    public long getId() {
        return id;
    }
    public void setId(long id) {
        this.id = id;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public Address getAddress() {
        return address;
    }
    public void setAddress(Address address) {
        this.address = address;
    }
}
复制代码

产生的数据库表

复制代码
CREATE TABLE `user` (
    `id` BIGINT(20) NOT NULL,
    `country` VARCHAR(255) NOT NULL,
    `name` VARCHAR(255) NOT NULL,
    `street` VARCHAR(255) NOT NULL,
    `zipcode` VARCHAR(255) NOT NULL,
    `username` VARCHAR(255) NULL DEFAULT NULL,
    PRIMARY KEY (`id`)
)
COLLATE='utf8mb4_general_ci'
ENGINE=InnoDB
;
复制代码

 

 这种嵌套关系理论上是可以嵌套无数层

posted @   翠微  阅读(236)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示