[英]Hibernate: how to map two columns for one table
I have a user table, that has 2 foreign keys for results (one for user result, and one for average result). 我有一个用户表,其中有2个用于结果的外键(一个用于用户结果,一个用于平均结果)。 There is one result table for both. 两者都有一个结果表。
How to map such situation in hibernate? 如何在休眠状态下映射这种情况? I tried one-to-one mapping, but it don't work. 我尝试了一对一映射,但是它不起作用。 In java, for easy access to results I want something like that: 在Java中,为了轻松访问结果,我想要这样的东西:
public class ParticipantData {
int id;
DataValues pickedData;
DataValues averageData;
}
User table: 用户表:
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 ;
average_data and picked_data points to data_values_id in results average_data和picked_data指向结果中的data_values_id
Result table: 结果表:
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 ;
My hibernate mapping that don't work: 我的休眠映射不起作用:
ParticipantData: 参与者数据:
<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>
DataValues: 数据值:
<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>
I will appreciate any help :) 我将不胜感激:)
I think that you problem is, that it is not possible to specify optional one-to-one
relationships. 我认为您的问题是,不可能指定可选one-to-one
关系。 So Hibernate forces you to specifiy a default value. 因此,Hibernate强制您指定默认值。 Have a look at the answer of the following question for a workaround. 解决方法请看以下问题的答案。 Optional one-to-one mapping in Hibernate Hibernate中可选的一对一映射
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.