私は2つのテーブルAとBを持っています。テーブルBは既にデータを持っています。テーブルAにデータを挿入したくありません。 テーブルAの1行はテーブルBの多くの行に対応し、テーブルBの1行はテーブルAの多くの行に対応します。 また、データをリレーショナルテーブルA_Bに挿入します。 これをどのように達成できますか?hibernateのmany-to-manyマッピングでただ1つのテーブルに挿入
-4
A
答えて
0
ここ
は私ParcelTrackingクラスです:
private int tracking_ID;
private Date update_DateTime;
private Set<TrackingStatus> trackingStatus;
private String comments;
// getter,setter and constructor
TrackingStatusクラス:
private int trackingStatus_ID;
private String trackingStatus_Desc;
private String comments;
private ParcelTracking parcelTracking;
//Getter, setter and constructor
parceltracking.hbm.xml:
<class name = "org.trackmodel.ParcelTracking" table = "parceltracking">
<id name = "tracking_ID" column = "Tracking_ID">
</id>
<property name = "update_DateTime" column = "Update_DateTime"></property>
<property name = "comments" column = "Comments"></property>
<set name = "trackingStatus" table = "parcel_status" cascade = "none" >
<key column = "Tracking_ID"></key>
<many-to-many class = "org.trackmodel.TrackingStatus" column = "TrackingStatus_ID"></many-to-many>
</set>
</class>
trackingstatus.hbm.xml:
<class name = "org.trackmodel.TrackingStatus" table = "trackingstatus">
<id name = "trackingStatus_ID" column = "TrackingStatus_ID">
</id>
<property name = "trackingStatus_Desc" column = "TrackingStatus_Desc"></property>
<property name = "comments" column = "Comments"></property>
<join table = "parcel_status" inverse = "true">
<key column = "TrackingStatus_ID"></key>
<many-to-one name = "parcelTracking" class = "org.trackmodel.ParcelTracking" column = "Tracking_ID"/>
</join>
</class>
ここで私のようにRandomCodeジェネレータクラスを使用してTRACKING_IDを生成します。
private static final int MAX = 99999999;
private static final int MIN = 11111111;
public int generateCode(){
Random random = new Random();
int code = random.nextInt(MAX-MIN+1)+MIN;
return code;
}
私はすでにTrackingStatus_IDが20.Iから始まるtrackingstatusテーブルに大量のデータを持っているが、私はデータを挿入していながら、それにデータを挿入する必要はありませんパーセルトラッキングの1行は、トラッキング状態テーブルの行数に対応します。
私は以下のようにコードを実行しようとしていますが:
TestClassを:
Set<TrackingStatus> statuses = new HashSet<TrackingStatus>();
RandomCode randomCode = new RandomCode();
SessionFactory sessionFactory = new Configuration().configure("hibernate.cfg.xml").buildSessionFactory();
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
int trackingCode = randomCode.generateCode();
ParcelTracking parcelTracking = new ParcelTracking();
parcelTracking.setTracking_ID(trackingCode);
parcelTracking.setComments("NO COMMENT PLEASE");
parcelTracking.setUpdate_DateTime(new Date());
TrackingStatus trackingStatus = session.get(TrackingStatus.class,22);
session.setReadOnly(trackingStatus, true);
statuses.add(trackingStatus);
parcelTracking.setTrackingStatus(statuses);
session.saveOrUpdate(parcelTracking);
session.getTransaction().commit();
session.close();
私は、次のエラーを得た:
org.hibernate.exception.GenericJDBCException: could not execute statement
at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:47)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:111)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:97)
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:207)
at org.hibernate.engine.jdbc.batch.internal.NonBatchingBatch.addToBatch(NonBatchingBatch.java:45)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2921)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3421)
at org.hibernate.action.internal.EntityInsertAction.execute(EntityInsertAction.java:89)
at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:560)
at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:434)
at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:337)
at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:39)
at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1295)
at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:468)
at org.hibernate.internal.SessionImpl.flushBeforeTransactionCompletion(SessionImpl.java:3135)
at org.hibernate.internal.SessionImpl.beforeTransactionCompletion(SessionImpl.java:2352)
at org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.beforeTransactionCompletion(JdbcCoordinatorImpl.java:485)
at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl.beforeCompletionCallback(JdbcResourceLocalTransactionCoordinatorImpl.java:147)
at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl.access$100(JdbcResourceLocalTransactionCoordinatorImpl.java:38)
at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl$TransactionDriverControlImpl.commit(JdbcResourceLocalTransactionCoordinatorImpl.java:231)
at org.hibernate.engine.transaction.internal.TransactionImpl.commit(TransactionImpl.java:65)
at org.tracktest.TestClass.main(TestClass.java:44)
Caused by: java.sql.SQLException: Field 'TrackingStatus_ID' doesn't have a default value
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:957)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3878)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3814)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2478)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2625)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2551)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1861)
at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2073)
at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2009)
at com.mysql.jdbc.PreparedStatement.executeLargeUpdate(PreparedStatement.java:5094)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1994)
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:204)
... 18 more
私はせずにparceltrackingテーブルにデータを挿入することができる方法trackingstatusテーブルに挿入しますか? 2つのテーブル間の関係は、1対多でなければなりません。
関連する問題
- 1. クラスが1つのテーブルに複数の行を持つHibernateマッピング
- 2. 2つのテーブルでのHibernateマッピング
- 3. もう1つのテーブルに挿入
- 4. 1つのサーバーの1つのテーブルにスクリプトデータを挿入し、別のサーバーの同じテーブルに挿入します
- 5. 1つのテーブルから別のテーブルにデータを挿入するステートメントを挿入
- 6. 2つのテーブルに1つの形式で挿入する
- 7. Hibernateは1マッピング
- 8. データベースにmanytomanyフィールドを挿入
- 9. 1つのレコードを挿入するだけで別のデータベースに挿入する
- 10. JPAのManyToManyマッピング
- 11. 別のテーブルから1つのテーブルに挿入
- 12. n個のテーブルのhibernateマッピング
- 13. 1つのクエリで2つのテーブルを挿入する
- 14. Jpa、hibernate、クラスをテーブルにマッピング
- 15. 2つのテーブルに1つのジャンクションを挿入する
- 16. Hibernateの2つの継承テーブルへのテーブルのマッピング
- 17. 特に1つのテーブルに挿入できません
- 18. IDENTITY列が1つだけのテーブルに挿入する方法(SQL Express)
- 19. 休止管理@ManyToManyテーブルの挿入と注文
- 20. 別の&ファイルアップロードを更新中に1つのテーブルに挿入
- 21. MYSQL別のテーブルの値を1つのカラムに挿入する
- 22. Hibernateは1対1のマッピング例外
- 23. 1つのテーブルを挿入し、別のシェルスクリプトで更新する
- 24. MySQL複数のテーブルの値を1つのクエリで1つのテーブルに挿入しますか?
- 25. 1つのHibernateマッピングを持つ複数のセカンドレベルキャッシュ設定
- 26. AccessDataSourceで2つのテーブルに挿入
- 27. hibernate manytomany xdoclet
- 28. Hibernate mappedBy and ManyToMany
- 29. 1つの列しかないテーブルに挿入
- 30. LINQを使用して1つのクエリで2つのテーブルに挿入
Javaコード** may ** work –
もちろんJavaコードは動作する必要があります。 – Rohit
あなたが試したこと、多分私たちが助けてくれることをお見せしてください –