まず、これを読んでくれているすべての人に感謝したいと思います。
アプリケーションの Hibernate fw に問題があります。次の図は、エラーの原因となっているデータベースの一部の図を示しています。
(出典: akamaihd.net )
私のコードはリバース エンジニアリングによって自動的に生成されました。それを機能させるには、module_application テーブルが多対多テーブルではないことをコード ジェネレーターに「表示」する必要がありました (カスタム リバース エンジニアリング戦略を使用)。ここで、コードを実行すると、次のエラーが発生します。
Error creating Session: org.hibernate.MappingException: Repeated column in mapping for entity: DAL.module_application.ModuleApplication column: application_id (should be mapped with insert="false" update="false")
ModuleApplication クラスは次のとおりです。
@Entity
@Table(name = "module_application", catalog = "domotics")
public class ModuleApplication implements java.io.Serializable
{
/**
*
*/
private static final long serialVersionUID = 4725933797587110677L;
private ModuleApplicationId id;
private Application application;
private Module module;
private Set<ModuleApplicationStatus> moduleApplicationStatuses = new HashSet<ModuleApplicationStatus>(0);
public ModuleApplication()
{
}
public ModuleApplication(ModuleApplicationId id, Application application, Module module)
{
this.id = id;
this.application = application;
this.module = module;
}
public ModuleApplication(ModuleApplicationId id, Application application, Module module, Set<ModuleApplicationStatus> moduleApplicationStatuses)
{
this.id = id;
this.application = application;
this.module = module;
this.moduleApplicationStatuses = moduleApplicationStatuses;
}
@EmbeddedId
@AttributeOverrides(
{
@AttributeOverride(name = "networkAddress", column = @Column(name = "network_address", nullable = false, length = 45)),
@AttributeOverride(name = "applicationId", column = @Column(name = "application_id", nullable = false))
})
public ModuleApplicationId getId()
{
return this.id;
}
public void setId(ModuleApplicationId id)
{
this.id = id;
}
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "application_id", nullable = false, insertable = false, updatable = false)
public Application getApplication()
{
return this.application;
}
public void setApplication(Application application)
{
this.application = application;
}
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "network_address", nullable = false, insertable = false, updatable = false)
public Module getModule()
{
return this.module;
}
public void setModule(Module module)
{
this.module = module;
}
@OneToMany(fetch = FetchType.LAZY, mappedBy = "moduleApplication")
public Set<ModuleApplicationStatus> getModuleApplicationStatuses()
{
return this.moduleApplicationStatuses;
}
public void setModuleApplicationStatuses(Set<ModuleApplicationStatus> moduleApplicationStatuses)
{
this.moduleApplicationStatuses = moduleApplicationStatuses;
}
}
ご覧のとおり、insert と update の両方が false に設定されています。このエラーの正確な原因や解決方法を知っている人がいる場合は、その知識を共有してください!