Java Hibernate:如何为一个表映射两列
我有一个用户表,它有两个结果外键(一个用于用户结果,一个用于平均结果)。两者都有一个结果表 如何在hibernate中映射这种情况?我尝试了一对一的映射,但不起作用。 在java中,为了方便访问结果,我需要类似的内容:Java Hibernate:如何为一个表映射两列,java,mysql,hibernate,Java,Mysql,Hibernate,我有一个用户表,它有两个结果外键(一个用于用户结果,一个用于平均结果)。两者都有一个结果表 如何在hibernate中映射这种情况?我尝试了一对一的映射,但不起作用。 在java中,为了方便访问结果,我需要类似的内容: public class ParticipantData { int id; DataValues pickedData; DataValues averageData; } 用户表: CREATE TABLE IF NOT EXISTS `partic
public class ParticipantData {
int id;
DataValues pickedData;
DataValues averageData;
}
用户表:
CREATE TABLE IF NOT EXISTS `participant_data` (
`participant_data_id` int(11) NOT NULL AUTO_INCREMENT,
`picked_data_id` int(11) NOT NULL,
`average_data_id` int(11) NOT NULL,
PRIMARY KEY (`participant_data_id`),
KEY `average_data` (`average_data_id`),
KEY `picked_data` (`picked_data_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
平均_数据和拾取的_数据指向结果中的数据_值_id
结果表:
CREATE TABLE IF NOT EXISTS `data_values` (
`data_values_id` int(11) NOT NULL AUTO_INCREMENT,
`n1` float NOT NULL,
`s1` float NOT NULL,
`x1` float NOT NULL,
`a` float NOT NULL,
`b` float NOT NULL,
PRIMARY KEY (`data_values_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=36407 ;
我的hibernate映射不起作用:
参与者数据:
<hibernate-mapping>
<class name="com.mep.model.ParticipantData" table="participant_data">
<id name="id" type="int" column="participant_data_id" >
<generator class="increment"/>
</id>
<one-to-one name="pickedData" class="com.mep.model.DataValues" cascade="all" constrained="true"/>
<one-to-one name="averageData" class="com.mep.model.DataValues" cascade="all" constrained="true"/>
</class>
</hibernate-mapping>
数据值:
<hibernate-mapping>
<class name="com.mep.model.DataValues" table="data_values">
<id name="id" type="int" column="data_values_id">
<generator class="increment" />
</id>
<property name="n1" type="float" column="n1" />
<property name="s1" type="float" column="s1" />
<property name="x1" type="float" column="x1" />
<property name="a" type="float" column="a" />
<property name="b" type="float" column="b" />
<one-to-one name="participantData" class="com.mep.model.ParticipantData"
cascade="all"></one-to-one>
</class>
</hibernate-mapping>
我将非常感谢您的帮助:)我想您的问题是,无法指定可选的
一对一关系。所以Hibernate强制您指定一个默认值。请查看以下问题的答案,了解解决方法。
什么叫“它不起作用”?您是否收到错误消息或生成的SQL错误?在尝试保存到数据库时,错误是“由以下原因引起的:java.SQL.SQLException:字段'picked_data_id'没有默认值”。id应该是自动生成的,所以我假设映射是错误的:PBoth(pickedData和averageData)应该是必需的。它们不能为null。当我尝试保存用户对象时,它们都已填充。我认为hibernate只会保存其中一个,这就是为什么会出现“由以下原因引起”错误:“java.sql.SQLException:Field'picked_data_id'没有默认值”。因此,也许映射应该以不同的方式进行。