Ниже приведен мой полный код
Вот файл cfg
<hibernate-configuration>
<session-factory>
<!-- Database connection settings -->
<property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:xe</property>
<property name="hibernate.connection.username">MyProject1</property>
<property name="hibernate.connection.password">tingtong</property>
<property name="hibernate.default_schema">MyProject1</property>
<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">1</property>
<!-- SQL dialect -->
<property name="hibernate.dialect">org.hibernate.dialect.OracleDialect</property>
<property name="hibernate.hbm2ddl.auto" >update</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>
<!-- Mapping files -->
<mapping resource="Person.hbm.xml"/>
</session-factory>
</hibernate-configuration>
Ниже приведен файл сопоставления
<hibernate-mapping>
<class name="com.daasl.Person" table="person">
<id name="id" type="int">
<generator class="increment"/>
</id>
<property name="name" column="cname" type="string"/>
<one-to-one name="address" class="com.daasl.Address" property-ref="personId" cascade="all"/>
</class>
<class name="com.daasl.Address" table="Address">
<id name="id" type="int">
<generator class="increment"/>
</id>
<!--for one to one -->
<property name="personId" type="int"/>
<property name="addressLine1" type="string"/>
</hibernate-mapping>
ниже находится объект Value
public class Person implements Serializable {
private int id;
private String name;
//private int addressId;
private Address address;
// getter seeter for each field
}
ниже указан адрес объекта
public class Address {
private int id;
private int personId;
private String addressLine1;
// getter seeter for each field
}
Ниже приведен фрагмент кода из основного метода
tx = session.beginTransaction();
person = (Person)session.get(Person.class, 4);
// Create a Person object and save it
Person p1 = new Person();
p1.setName("Scott");
Address add1= new Address();
add1.setAddressLine1("NY1");
p1.setAddress(add1);
session.save(p1);
// p1.setName("mohit1");
// Retrieve the person objects
person = (Person)session. get(Person.class,1);
tx.commit();
tx = null;
Как и в приведенном выше коде, когда я сохраняю объект Person
, я ожидаю, что адресный объект будет также сохранен вместе с соответствующим personid
. Когда я запускаю вышеуказанную программу, personid
отображается как 0
в столбце personid внутри таблицы адресов. согласно моему пониманию personid
должен быть вставлен со значением идентификатора таблицы личности. Правильно?
Второе, что я хотел бы знать: создает ли отображение one to one
отношение внешнего-дочернего ключа. Как и в приведенном выше примере, я ожидал, что столбец personid внутри таблицы адресов должен указывать на первичный ключ таблицы person, т.е. на столбец id. Но это не создало никаких ограничений внешнего ключа для столбца personid таблицы адресов.
Я что-то здесь упустил