我在数据库中有两个表一对一的关系:
CREATE TABLE IF NOT EXISTS `toproject`.`osoby` (
`id` INT NOT NULL AUTO_INCREMENT ,
`imie` VARCHAR(45) NOT NULL ,
`nazwisko` VARCHAR(45) NOT NULL ,
`pesel` VARCHAR(11) NOT NULL ,
`telefon` VARCHAR(45) NULL ,
`pensja` VARCHAR(45) NULL ,
`typ` VARCHAR(45) NOT NULL ,
`stanowisko_id` INT NULL ,
PRIMARY KEY (`id`) ,
UNIQUE INDEX `pesel_UNIQUE` (`pesel` ASC) ,
INDEX `fk_osoby_stanowiska_idx` (`stanowisko_id` ASC) ,
CONSTRAINT `fk_osoby_stanowiska`
FOREIGN KEY (`stanowisko_id` )
REFERENCES `toproject`.`stanowiska` (`id` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
CREATE TABLE IF NOT EXISTS `toproject`.`adresy` (
`id` INT NOT NULL AUTO_INCREMENT,
`ulica` VARCHAR(45) NOT NULL ,
`miejscowosc` VARCHAR(45) NOT NULL ,
INDEX `fk_adres_osoby1_idx` (`id` ASC) ,
PRIMARY KEY (`id`) ,
CONSTRAINT `fk_adres_osoby1`
FOREIGN KEY (`id` )
REFERENCES `toproject`.`osoby` (`id` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
我必须使用@inherity(strategy=inheritancetype.single_table)
来编写Java实体类:
@Entity
@Table(name = "osoby")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="typ", discriminatorType=DiscriminatorType.STRING)
public class Osoba implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id")
private Integer id;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 45)
@Column(name = "imie")
private String imie;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 45)
@Column(name = "nazwisko")
private String nazwisko;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 11)
@Column(name = "pesel")
private String pesel;
客户端类:
@Entity
@DiscriminatorValue(value = "Klient")
public class Klient extends Osoba {
@Size(max = 45)
@Column(name = "telefon")
private String telefon;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "osobyId")
private Collection<Zamowienie> zamowienieCollection;
@OneToOne(cascade = CascadeType.ALL, mappedBy = "klient")
private Adres adres;
占有实体:
@Entity
@Table(name = "adresy")
public class Adres implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id")
private Integer id;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 45)
@Column(name = "ulica")
private String ulica;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 45)
@Column(name = "miejscowosc")
private String miejscowosc;
@JoinColumn(name = "id", referencedColumnName = "id", insertable = false, updatable = false)
@OneToOne(optional = false)
private Klient klient;
我有一个klientMB,它添加了人和地址
@ManagedBean
@RequestScoped
public class KlientMB {
@EJB
private KlientDaoLocal klientDao;
private Klient klient;
public KlientMB() {
}
public Klient getKlient() {
if (klient == null) {
klient = new Klient();
Adres adres = new Adres();
klient.setAdres(adres);
adres.setOsoba(klient);
}
return klient;
}
public void setKlient(Klient klient) {
this.klient = klient;
}
public String createKlient() {
klientDao.create(klient);
return "klienci.xhtml?faces-redirect=true";
}
但是当我尝试添加一个Klient时,我出现了这个错误:
我认为问题在于您使用toproject.adresy
表中的id
(主键)列作为外键连接到toproject.osoby
。您应该引入一个新列(例如osoby_id)作为外键列,以连接到toproject.osoby
。当前发生的情况是,ADRES
表的id被用来在OSOBY
表中查找记录,但没有记录。
问题内容: 我有一对一的关系,但是hibernatetool在生成模式时抱怨。这是显示问题的示例: 人与OtherInfo具有一对一关系: 人是OtherInfo的拥有方。OtherInfo是拥有方,因此person用于在Person中指定属性名称“ otherInfo”。 使用hibernatetool生成数据库架构时出现以下错误: 知道为什么吗?我是在做错什么还是这是Hibernate错误?
我知道懒加载是做不到的,如果你在一对一的关系中有双向的关系。 所以我读了一篇关于如何使JPA OneToOne关系变懒的文章。 文章说你不能在一对一的关系中创建代理,但我不太理解。 我觉得多对一的关系和一对一的关系没有什么区别。他说,在多对一的关系中,您可以创建一个代理,因为您可以从fk获得值。 我觉得这两个是不一样的。我知道PK值相等,那么为什么不只有一对一的关系做懒加载呢?
问题内容: 也许这是一个愚蠢的问题,但这困扰了我。 我有一个从员工到车辆的双向一对多关系。当我第一次将Employee保留在数据库中时(即它没有分配的ID),我也希望保留其关联的Vehicles。 目前,这对我来说很好,除了我保存的Vehicle实体没有自动映射关联的Employee,并且在数据库中Vehicle表中的employee_id外键列为空。 我的问题是,是否可以在雇员本身被保留的同时保
问题内容: 是否可以在JPA的一对一关系的两边使用@JoinColumn?我的印象是,应该始终在一对一关系的拥有方中使用它,因为拥有方将具有外键列,并且此注释定义了外键列的属性。请说明我的理解是否正确。 编辑#1- 我想知道,在哪种情况下我们将在一对一关系的两边都使用@JoinColumn批注? 问题答案: OneToOne关系不一定是双向的。当在源对象和目标对象中都存在对该关系的另一个对象的引用
问题内容: 我想在两个实体(消费者和政策)之间建立一对多关系。一个消费者应该有几项政策。 这是我希望拥有的Consumer JSON对象的示例: 这是我到目前为止所拥有的: 政策实体 消费者实体 我认为这并不难,但是我现在尝试了几个小时而无法完成。我是Spring的新手,所以如果有人能够帮助我,我将非常感激! 问题答案: @Entity public class Consumer { 不是必需的,