我得到以下错误,当我尝试添加一个应用程序和应用程序设置。以下是详细的错误消息:
下面是junit测试
@Test
public void testsSaveApps() {
List<AppSetting> settings = new ArrayList<AppSetting>();
//int settingid = types.getMaxSettingId()+1;
settings.add(createSettingsOne());
settings.add(createSettingsTwo());
assertEquals(true,types.addTVappsWithSettings( 1,13, "App1", settings, "Danka" ) );
}
private static AppSetting createSettingsOne(){
AppSetting setting = new AppSetting();
setting.setCreated_by("Kasun");
LocalDateTime time = new LocalDateTime();
setting.setCreated_time(time);
setting.setDisplayOrder(1);
setting.setEditable(true);
setting.setSettings_key("url");
setting.setSettings_value("www.google.com");
setting.setUpdated_time(time);
setting.setUpdated_by("Kasun");
//setting.setSettings_id(settingid);
return setting;
}
private static AppSetting createSettingsTwo(){
AppSetting setting = new AppSetting();
setting.setCreated_by("Kasun");
LocalDateTime time = new LocalDateTime();
setting.setCreated_time(time);
setting.setDisplayOrder(2);
setting.setEditable(true);
setting.setSettings_key("url2");
setting.setSettings_value("www.CBC.com");
setting.setUpdated_time(time);
setting.setUpdated_by("Kasun");
//setting.setSettings_id(settingid);
return setting;
}
这是保存应用程序和设置的方法
public boolean addTVappsWithSettings(int appTypeId,int companyid, String appName, List<AppSetting> settings, String createdBy) {
//set properties of the app to persist
App app = new App();
//app.setSettings_id(settingid);
// app.setSettings_id(settingid);
app.setApp_id(appTypeId);
app.setCompany_id(companyid);
app.setApp_name(appName);
app.setCreated_by(createdBy);
LocalDateTime created_time = new LocalDateTime();
app.setCreated_time(created_time);
app.setUpdated_by(createdBy);
app.setUpdated_time(created_time);
app.setEnable(true);
app.setapps(settings);
session.save(app);
if (!HibernateUtil.INSTANCE.commitTransaction())
return false;
return true;
}
这些是DAO类。
@Entity
@Table(name="company")
public class Company {
@Id //primary key
@GeneratedValue(strategy = GenerationType.IDENTITY)//strategy for generating auto generated number
@Column(name= "company_id", nullable = false)
private int company_id;
@OneToMany(fetch = FetchType.EAGER,cascade = CascadeType.ALL)
@Fetch(value = FetchMode.SUBSELECT)
@JoinColumn(name = "company_id", nullable = false)
private List<App> threatviewapps = new ArrayList<App>();
@NotEmpty
@Column(name= "short_name", nullable = false)
private String short_name;
@NotEmpty
@Column(name= "company_description", nullable = false)
private String company_description;
@NotEmpty
@Column(name= "company_name", nullable = false)
private String company_name;
@Type(type="org.jadira.usertype.dateandtime.joda.PersistentLocalDateTime")
@Column(name= "created_time", nullable = false)
private LocalDateTime created_time;
@Column(name= "created_by", nullable = false)
private String created_by;
@Type(type="org.jadira.usertype.dateandtime.joda.PersistentLocalDateTime")
@Column(name= "update_time", nullable = false)
private LocalDateTime update_time;
@Column(name= "updated_by", nullable = false)
private String updated_by;
@Column(name= "enable", nullable = false)
private boolean enable;
这是应用刀
@Entity
@Table(name = "apps")
public class App {
@Id // primary key
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "settings_id", insertable = false, updatable = false)
private int settings_id;
@Column(name = "app_id", nullable = false)
private int app_id;
/* @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "settings_id", nullable = false)
private List<AppSetting> tvsettings = new ArrayList<AppSetting>();*/
@ElementCollection
@CollectionTable(name="threatview_app_settings",joinColumns = @JoinColumn(name = "settings_id"))
private List<AppSetting> tvsettings = new ArrayList<AppSetting>();
@Column(name = "company_id", insertable = false, updatable = false)
private int company_id;
@Column(name = "app_name", nullable = false)
private String app_name;
@Type(type = "org.jadira.usertype.dateandtime.joda.PersistentLocalDateTime")
@Column(name = "created_time", nullable = false)
private LocalDateTime created_time;
@Column(name = "created_by", nullable = false)
private String created_by;
@Type(type = "org.jadira.usertype.dateandtime.joda.PersistentLocalDateTime")
@Column(name = "updated_time", nullable = false)
private LocalDateTime updated_time;
@Column(name = "updated_by", nullable = false)
private String updated_by;
@Column(name = "enable", nullable = false)
private boolean enable;
为什么我会得到上面的错误?如果你们需要更多的信息,请告诉我。
更新
@Entity
@IdClass(SettingIDKey.class)
@Table(name = "app_settings")
public class AppSetting {
@Id
private int settings_id;
@Id
private String settings_key;
@Column(name = "settings_value", nullable = false)
private String settings_value;
@Type(type = "org.jadira.usertype.dateandtime.joda.PersistentLocalDateTime")
@Column(name = "created_time", nullable = false)
private LocalDateTime created_time;
@Column(name = "created_by", nullable = false)
private String created_by;
@Type(type = "org.jadira.usertype.dateandtime.joda.PersistentLocalDateTime")
@Column(name = "updated_time", nullable = false)
private LocalDateTime updated_time;
@Column(name = "updated_by", nullable = false)
private String updated_by;
@Column(name = "editable", nullable = false)
private boolean editable;
@Column(name = "enable", nullable = false)
private boolean enable;
@Column(name = "display_order", nullable = false)
private int displayOrder;
在您的例子中,您已经将一个Tomany作为company_id的所有者。即Company类是拥有方。
在这个场景中,插入App记录会导致两个查询,一个是insert(插入),一个是UPDATE(更新)。首先是insert语句,它在没有company_id的情况下(因为它不是所有者)执行对App表的insert操作,然后它激发一个update查询来更新company_id。因此,要使第一个insert语句成功,它要求html" target="_blank">数据库中的company_id为空字段。否则它将抛出ConstraintViolationException。
如果您将ManyToOne设置为拥有方,则会在App表中产生单个insert语句。因此在这种情况下,company_id字段可以为null。
因此,我看到了两个选择:
下面的输出有助于理解上述语句。我有一个Forest类,它和Tree类有一个完全的关系。
多对一方拥有
Hibernate: values identity_val_local()
Hibernate: insert into Tree (id, "COUNT", FOREST, name, version) values (default, ?, ?, ?, ?)
一对多侧拥有
Hibernate: insert into Tree (id, "COUNT", name, version) values (default, ?, ?, ?)
Hibernate: values identity_val_local()
Hibernate: update Tree set FOREST=?, index=? where id=?
问题内容: 我在Hibernate尝试了简单的程序,并发现了一堆异常。 我不知道到底是什么问题。 我有三个课程-书籍,阅读器和使用。最后一个是将前两个绑定为一对多。 这是我的: 这是异常消息: 的摘要: DB上的所有表均已创建,但为空。一切都还好。有什么建议么? 如何解决这个麻烦? 问题答案: 在MySQL中, USING 是保留字。 因此,只需使用实体上的注释来重命名表即可。就像是 我假设您有一
我刚开始使用hibernate编程,请帮帮我,我在执行下面的文件时遇到了问题。我使用的是MySQL数据库。我的错误是 SLF4J:未能加载类“org.slf4j.impl.StatibloggerBinder”。slf4j:默认为无操作(NOP)记录器实现slf4j:有关更多细节,请参见http://www.slf4j.org/codes.html#staticloggerbinder。Hiber
我刚开始hibernate编程,请帮我一下,我在执行下面的文件时遇到了问题。我使用的是MySQL数据库。我的错误是 SLF4J:无法加载类“org.slf4j.impl.StaticloggerBinder”。slf4j:默认为无操作(NOP)记录器实现slf4j:请参阅http://www.slf4j.org/codes.html#staticloggerbinder了解更多详细信息。Hiber
问题内容: 我正在尝试运行此代码并删除MySQL数据库中的某些记录,但出现此错误: 这是我目前拥有的代码: 我能够运行select *查询没有问题,但是当我尝试运行DELETE查询时,它并没有解决。我已经在MySQL工作台中运行了此命令,并且该命令有效,但是当我使用Java时,该命令不起作用。 问题答案: 您使用它代替。 仅用于返回数据的语句。适用于不会返回日期的日期(更新,插入,删除,我相信诸如
我得到了"org.springframework.dao.数据完整性违反异常:无法执行语句;SQL[n/a];约束[null];嵌套异常是org.hibernate.exception.约束违反异常:无法执行语句"异常,同时将对象保存到存储库。 要求:计划将只有一个Cpricing对象,因此我添加了@OneToOne映射。下面是预期的表结构。 我在实体类中有以下代码更改: 当试图保存包含CPric
问题内容: 仓库程序 JDBC程序 在执行上述程序时,程序出错。 Eroor: 问题答案: 设计用于与返回游标(通常是查询)的sql语句一起使用。您的调用不会返回游标,因此不适合与此方法一起使用。您应该只使用,然后从输出参数获取值: