データベースに次のテーブルがあります。テーブル内のユーザーに関連付けられた行数をテーブルbooked_items
内の列に含めたいと思います。確かにプログラム内でできるのですが、ハイバネートマッピングやテーブルDDLでできると汚いです。testuser
testbooking
CREATE TABLE `testuser` (
`id` bigint(20) NOT NULL,
`username` varchar(30) DEFAULT NULL,
`password` varchar(128) DEFAULT NULL,
`booked_items` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE `testbooking` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`user_id` bigint(20) NOT NULL,
`item_id` bigint(20) NOT NULL,
`start_date` date DEFAULT NULL,
`end_date` date DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `FKEC747367A12BE486` (`item_id`),
KEY `FKEC7473671463A66C` (`user_id`),
CONSTRAINT `FKEC7473671463A66C` FOREIGN KEY (`user_id`) REFERENCES `testuser`
(`id`),
CONSTRAINT `FKEC747367A12BE486` FOREIGN KEY (`item_id`) REFERENCES `testitem`
(`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;
CREATE TABLE `testitem` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`title` varchar(30) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=38 DEFAULT CHARSET=latin1;
testuser テーブルの休止状態のマッピングは次のとおりです。
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="my.hibernate.actors.User" discriminator-value="user"
table="testuser" catalog="efeu">
<id name="id" type="java.lang.Long">
<column name="id" />
<generator class="increment" />
</id>
<discriminator column="user_type" type="string" length="8" />
<property name="username" type="java.lang.String" not-null="true"
unique="true" unique-key="true">
<column name="username" length="30" />
</property>
<property name="password" type="java.lang.String" not-null="true">
<column name="password" length="128" />
<subclass name="my.hibernate.actors.Subscriber"
discriminator-value="subsc">
<property name="bookedItems" type="java.lang.Integer" column="booked_items" />
<set name="bookings" inverse="true" cascade="all-delete-orphan">
<key column="user_id" />
<one-to-many class="my.hibernate.operations.Booking" />
</set>
</subclass>
<subclass name="my.hibernate.actors.Clerk"
discriminator-value="clerk" />
</class>
</hibernate-mapping>
testbooking テーブルの休止状態のマッピングは次のとおりです。
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="my.hibernate.operations.Booking" table="testBooking" catalog="efeu">
<id name="id" type="java.lang.Long">
<column name="id" />
<generator class="native" />
</id>
<many-to-one name="userID" column="user_id" cascade="persist"
not-null="true" class="my.hibernate.actors.Subscriber" />
<many-to-one name="itemID" column="item_id" cascade="persist"
not-null="true" class="my.hibernate.items.Item" />
<property name="startDate" type="java.sql.Date" not-null="true">
<column name="start_date" length="10" />
</property>
<property name="endDate" type="java.sql.Date">
<column name="end_date" length="10" />
</property>
</class>
</hibernate-mapping>
PS。この問題について 2 つの別々の質問をしたかったのです。1回はHibernate用、もう1回はSQL用ですが、重複と見なされるのではないかと心配しました。Hibernate については、私が知りたい SQL について知る必要があります。そして、それはSQLの方言に依存していますか? 現在、mysqlの方言を求めています。