Java Hibernate:为什么索引列只在反向=”时更新;假;

Java Hibernate:为什么索引列只在反向=”时更新;假;,java,sql,hibernate,hibernate-mapping,dao,Java,Sql,Hibernate,Hibernate Mapping,Dao,大家好: 请看我的xml映射: User.hbm.xml 特别是查看inverse=“false”和: <hibernate-mapping package="demidov.pkg.domain"> <class name="TheUser" table="USER"> <id name="userId" column="ID" type="integer"> <generator class="nati

大家好:

请看我的xml映射:

User.hbm.xml
特别是查看
inverse=“false”

<hibernate-mapping package="demidov.pkg.domain">
    <class name="TheUser" table="USER">
        <id name="userId" column="ID" type="integer">
            <generator class="native"/>         
        </id>

        <property name="userFirstName" column="FIRST_NAME" type="string" not-null="true"/>
        <property name="userLastName" column="LAST_NAME" type="string"/>
        <property name="userEmail" column="EMAIL" type="string" not-null="true"/>
        <property name="personAddress" column="PERSON_ADDRESS" type="string" />
        <property name="personPhoneNumber" column="PERSON_PHONE" type="string" />
        <property name="userGender" column="GENDER" type="string"/>

        <list name="userEventsList" inverse="false" lazy="true" fetch="select" cascade="all" >
            <key column="USER_ID" not-null="true" />
            <index column="EVENT_INDEX" />          
            <one-to-many class="UserEvents"/>       
        </list>
    </class>
</hibernate-mapping>
因此,由于在我的
User.hbm.xml
中是
reverse=“false”
而在我的
UserEvents.hbm.xml
中是
insert=“false”update=“false”
当我想将User+UserEvents保存到我的数据库中时,数据库中的
对于插入的集合的每个元素都将具有
null
值。 像这样:

+----+------------+---------+-------------+----------------+-------------------------+-----------------------------+
| ID | EVENT_DATE | USER_ID | EVENT_INDEX | MAINTENANCE_ID | DESCRIPTION_MAINTENANCE | ADDITIONAL_INFO_MAINTENANCE |
+----+------------+---------+-------------+----------------+-------------------------+-----------------------------+
|  1 | 2013-10-31 |       1 |           0 |              2 | Description maitnance   |  Maitnance Test             |
|  2 | 2013-10-31 |       1 |           1 |              2 | Description maitnance   |  Maitnance Test             |
+----+------------+---------+-------------+----------------+-------------------------+-----------------------------+
+----+------------+---------+-------------+----------------+-------------------------+-----------------------------+
| ID | EVENT_DATE | USER_ID | EVENT_INDEX | DEVELOPMENT_ID | DESCRIPTION_DEVELOPMENT | ADDITIONAL_INFO_DEVELOPMENT |
+----+------------+---------+-------------+----------------+-------------------------+-----------------------------+
|  1 | 2013-10-31 |       1 |        NULL |              1 | Develop                 | Development Test            |
|  2 | 2013-10-31 |       1 |        NULL |              1 | Develop                 | Development Test            |
+----+------------+---------+-------------+----------------+-------------------------+-----------------------------+
还有一个问题,为什么我的hibernate插入复制了我的集合元素包含的多次相同的值。正如您从表中看到的,我正试图将一个DESCRIPTION\u DEVELOPMENT和一个DESCRIPTION\u MAINTENANCE object->保存到DB中,它们位于一个集合中,但hibernate会将它们保存两次,因为我在同一集合中有2个不同的元素

我如何插入:

List<UserEvents> eventList  = new ArrayList<UserEvents>();

SoftwareDevelopmentEvent sde = new SoftwareDevelopmentEvent();
sde.setDescriptionDevelopment("Develop");
sde.setAdditionalInfoDevelopment("Development Test");
sde.setUserEventDate(new Date());
eventList.add(sde);

ComputerMaintenanceEvent cme = new ComputerMaintenanceEvent();
cme.setDescriptionMaintenance("Description maitnance");
cme.setAdditionalInfoMaintenance(" Maitnance Test");
cme.setUserEventDate(new Date());
eventList.add(cme);

TheUser user = new TheUser();
user.setUserFirstName("Vadim1");
user.setUserLastName("Dem1");
user.setUserGender("Male1");
user.setUserEmail("vad@mail.ru");
user.setPersonAddress("Adress");
user.setPersonPhoneNumber("1111111");

user.setUserEventsList(eventList);

dao.saveUser(user);

请看我的帖子

您需要设置关系的双方

e、 g.cme.setUser(用户)

艾伦

List<UserEvents> eventList  = new ArrayList<UserEvents>();

SoftwareDevelopmentEvent sde = new SoftwareDevelopmentEvent();
sde.setDescriptionDevelopment("Develop");
sde.setAdditionalInfoDevelopment("Development Test");
sde.setUserEventDate(new Date());
eventList.add(sde);

ComputerMaintenanceEvent cme = new ComputerMaintenanceEvent();
cme.setDescriptionMaintenance("Description maitnance");
cme.setAdditionalInfoMaintenance(" Maitnance Test");
cme.setUserEventDate(new Date());
eventList.add(cme);

TheUser user = new TheUser();
user.setUserFirstName("Vadim1");
user.setUserLastName("Dem1");
user.setUserGender("Male1");
user.setUserEmail("vad@mail.ru");
user.setPersonAddress("Adress");
user.setPersonPhoneNumber("1111111");

user.setUserEventsList(eventList);

dao.saveUser(user);
public void saveUser(TheUser user) {
    Session session = sessionFactory.getCurrentSession();
    session.save(user);
}