gpt4 book ai didi

java - 一对一单向 hibernate 映射在创建表时不创建外键

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:07:47 25 4
gpt4 key购买 nike

谁能告诉我哪里错了。已经浪费了一天。问题是为什么 hibernate(v 3.5.0 FINAL) 没有在 cdl_group_module 表中创建外键?它只是创建只有单列的表,即 id(PK)。我想要一对一的单向映射。我不能使用双向映射,因为 cdl_group 也被与 cdl_module 相同的其他表使用。

下面是我的 POJO。

public class CDLGroupModule extends AbstractDomainObject {

/**
*
*/
private static final long serialVersionUID = 1L;

private Group group;
private CDLModule cdlModule;

/**
* @return the group
*/
public Group getGroup() {
return group;
}

/**
* @param group
* the group to set
*/
public void setGroup(Group group) {
this.group = group;
}

/**
* @return the cdlModule
*/
public CDLModule getCdlModule() {
return cdlModule;
}

/**
* @param cdlModule
* the cdlModule to set
*/
public void setCdlModule(CDLModule cdlModule) {
this.cdlModule = cdlModule;
}

}


public class Group extends AbstractDomainObject{

/**
*
*/
private static final long serialVersionUID = 1L;
private String name;
private String description;

public Group() {
}

public Group(String name, String description) {
this.name = name;
this.description = description;
}

/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}
/**
* @return the description
*/
public String getDescription() {
return description;
}
/**
* @param description the description to set
*/
public void setDescription(String description) {
this.description = description;
}

@Override
public String toString() {
return "[Group : { id : " + id + ", name : " + name + ", description :" + description + " }]";
}

}


public class CDLModule extends AbstractDomainObject {

/**
*
*/
private static final long serialVersionUID = 1L;
private CdlModuleEnum module;

/**
* @return the module
*/
public CdlModuleEnum getModule() {
return module;
}

/**
* @param module
* the module to set
*/
public void setModule(CdlModuleEnum module) {
this.module = module;
}

}

下面是我的hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.qait.cdl.commons.domain">
<class name="CDLGroupModule" table="cdl_group_module">

<id name="id" type="long" column="id">
<generator class="native" />
</id>

<!-- <many-to-one name="group" cascade="all" fetch="join"
lazy="false" class="Group" not-null="true" unique="true"/>

<many-to-one name="cdlModule" cascade="all" fetch="join"
lazy="false" class="CDLModule" not-null="true" unique="true"/> -->

<one-to-one name="group" cascade="all-delete-orphan" fetch="join"
lazy="false" class="Group" />

<one-to-one name="cdlModule" cascade="all-delete-orphan" fetch="join"
lazy="false" class="CDLModule" />


</class>
</hibernate-mapping>

Hibernate 已成功创建cdl_groupcdl_module 表。我的 id 属性存在于所有 POJO 都扩展的 AbstractDomainObject 类中。如果我尝试使用 unique=true 进行多对一映射而不是一对一映射,那么 hibernate 甚至不会创建表。这背后的原因是什么?任何形式的帮助都将不胜感激。您可以询问是否需要我这边的更多信息。

最佳答案

看来hibernate for one to one会尝试映射上PK。当获取 cdl_group_module 时,它​​将尝试填充与任何具有与 cdl_group_module 的 PK 相同 PK 的 cdl_group 的关系。当您删除和添加新的 cdl_group 实体时,这会变得很糟糕。

尝试设置此属性以创建 FK:"property-ref (optional): 与该类主键关联的关联类的属性名称。如果不指定,则使用关联类的主键。"

关于java - 一对一单向 hibernate 映射在创建表时不创建外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18973268/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com