私は Hibernateをフォローしていました:ベースクラスを使用して共通フィールドをマップ し、 openjpa継承チュートリアル を使用して、ID、lastModifiedDateなどの共通列をベーステーブルに配置します。
私の注釈付きマッピングは次のとおりです:
BaseTable:
@MappedSuperclass
public abstract class BaseTable {
@Id
@GeneratedValue
@Column(name = "id")
private int id;
@Column(name = "lastmodifieddate")
private Date lastModifiedDate;
...
人物テーブル-
@Entity
@Table(name = "Person ")
public class Person extends BaseTable implements Serializable{
@Column(name = "name")
private String name;
...
生成されたステートメントの作成:
create table Person (id integer not null auto_increment, lastmodifieddate datetime, name varchar(255), primary key (id)) ;
Personオブジェクトをdbに保存した後、
Person p = new Person();
p.setName("Test");
p.setLastModifiedDate(new Date());
..
getSession().save(p);
日付フィールドを設定していますが、生成されたIDとLastModifiedDate = null、およびName="Test"でレコードを保存しています。
ステートメントの挿入:
insert into Person (lastmodifieddate, name) values (?, ?)
binding parameter [1] as [TIMESTAMP] - <null>
binding parameter [2] as [VARCHAR] - Test
IDクエリによる読み取り: 以下のように休止状態クエリ(IDによる取得)を実行すると、指定されたIDで人を読み取ります。
Criteria c = getSession().createCriteria(Person.class);
c.add(Restrictions.eq("id", id));
Person person= c.list().get(0);
//person has generated ID, LastModifiedDate is null
select query select person0_.id as id8_, person0_.lastmodifieddate as lastmodi8_, person0_.name as name8_ from Person person0_
- Found [1] as column [id8_]
- Found [null] as column [lastmodi8_]
- Found [Test] as column [name8_ ]
ReadAllクエリ:
Query query = getSession().createQuery("from " + Person.class.getName());
List<Person> allPersons=query.list();
すべて読み取りに対応するSQL
select query select person0_.id as id8_, person0_.lastmodifieddate as lastmodi8_, person0_.name as name8_ from Person person0_
- Found [1] as column [id8_]
- Found [null] as column [lastmodi8_]
- Found [Test] as column [name8_ ]
- Found [2] as column [id8_]
- Found [null] as column [lastmodi8_]
- Found [Test2] as column [name8_ ]
しかし、コンソールでリストを印刷すると、もっと奇妙になります。ListofPersonオブジェクトを選択しています
- IDフィールド=すべて0(なぜすべて0?)
- LastModifiedDate = null
- 名前フィールドには有効な値があります
ここで何が悪いのかわかりません。見ていただけませんか?
ご参考までに、
私のHibernate-コアバージョン:4.1.2、MySQLコネクタバージョン:5.1.9。
要約すると、ここには2つの問題があります
- すべて読み取りを使用すると、すべてのIDフィールドが=0になるのはなぜですか?
- LastModifiedDateが挿入されないのはなぜですか?