gpt4 book ai didi

java - Hibernate没有由db生成主键?

转载 作者:行者123 更新时间:2023-12-01 05:55:54 25 4
gpt4 key购买 nike

我正在构建一个数据仓库并想要使用InfiniDB作为存储引擎。但是,它不允许主键或外键约束(或与此相关的任何约束)。

当我执行插入时,Hibernate 提示“数据库未返回 native 生成的标识值”。

每个表都是关系表,并且包含一个以前用作主键的唯一整数列 - 我想保留它,但只是在数据库中没有该列是主键的约束。

我假设问题是 Hibernate 期望数据库返回生成的 key 。是否可以覆盖此行为,以便我可以自己设置主键字段的值并让 Hibernate 满意?

--编辑--

其中两个映射如下:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated Jun 1, 2010 2:49:51 PM by Hibernate Tools 3.2.1.GA -->
<hibernate-mapping>
<class name="com.example.project.Visitor" table="visitor" catalog="orwell">
<id name="id" type="java.lang.Long">
<column name="id" />
<generator class="identity" />
</id>
<property name="firstSeen" type="timestamp">
<column name="first_seen" length="19" />
</property>
<property name="lastSeen" type="timestamp">
<column name="last_seen" length="19" />
</property>
<property name="sessionId" type="string">
<column name="session_id" length="26" unique="true" />
</property>
<property name="userId" type="java.lang.Long">
<column name="user_id" />
</property>
<set name="visits" inverse="true">
<key>
<column name="visitor_id" />
</key>
<one-to-many class="com.example.project.Visit" />
</set>
</class>
</hibernate-mapping>

和:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated Jun 1, 2010 2:49:51 PM by Hibernate Tools 3.2.1.GA -->
<hibernate-mapping>
<class name="com.example.project.Visit" table="visit" catalog="orwell">
<id name="id" type="java.lang.Long">
<column name="id" />
<generator class="identity" />
</id>
<many-to-one name="visitor" class="com.example.project.Visitor" fetch="join" cascade="all">
<column name="visitor_id" />
</many-to-one>
<property name="visitId" type="string">
<column name="visit_id" length="20" unique="true" />
</property>
<property name="startTime" type="timestamp">
<column name="start_time" length="19" />
</property>
<property name="endTime" type="timestamp">
<column name="end_time" length="19" />
</property>
<property name="userAgent" type="string">
<column name="user_agent" length="65535" />
</property>
<set name="pageViews" inverse="true">
<key>
<column name="visit_id" />
</key>
<one-to-many class="com.example.project.PageView" />
</set>
</class>
</hibernate-mapping>

最佳答案

正如您在评论中指出的,您可以使用许多 id 生成器。例如,你们很多人都觉得“增量”很方便。完整概述
http://docs.jboss.org/hibernate/core/3.3/reference/en/html/mapping.html#mapping-declaration-id

并且 hibernate 不会关心您的数据库限制(主键和外键)。事实上,hibernate 无法知道某些数据库限制,直到它被违反。如果限制不存在,就永远不能违反:)

关于java - Hibernate没有由db生成主键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2998548/

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