我有两个实体:
@Entity
public class File
.......
@Id @GeneratedValue(strategy=GenerationType.AUTO)
private int id;
@OneToMany(fetch=FetchType.LAZY, mappedBy="file", cascade=CascadeType.ALL)
private List<Tag> tags;
.......
OTHER PROPERTIES
.......
@Entity
public class Tag
.......
@Id @GeneratedValue(strategy=GenerationType.AUTO)
private int id;
@ManyToOne
@JoinColumn(name="file_id")
private File file;
@Column
private String tag;
.......
OTHER PROPERTIES
.......
我正在尝试通过执行以下操作插入文件(以及随后的标签):
File file = new File();
Tag tag = new Tag();
tag.setTag("tag1");
Tag2 tag2 = new Tag();
tag2.setTag("tag2");
List<Tag> tags = new ArrayList<Tag>();
tags.add(tag);
tags.add(tag2);
file.setTags(tags);
---Add other file attributes here---
然后,我使用以下命令将文件插入DAO:
sessionFactory.getCurrentSession().saveOrUpdate(file);
在我的日志中,我在“文件”表中看到一个插入,在标签表中看到2个插入,但是,指向我的文件表(file_id)的标签表中的外键为NULL。
我可能做错了什么?
您不是将标签的文件设置为文件,而是将标签的文件设置为文件。请记住,在OOP中,与关系模型相反,您必须设置关系的两端。您不能仅从标签导航到文件,因为您已向文件添加了一组标签。就您而言,您可以从文件导航到标签(即:列出文件的所有标签)。仅通过查看标签就无法确定标签属于哪个文件。
通常在其中一个模型中执行一个辅助方法,如下所示:
public void addTag(Tag tag) {
this.tags.add(tag);
tag.html" target="_blank">setFile(this);
}
请参见以下示例(来自Hibernate的测试套件):
我有两个表,它们的关系如下图所示 我创建了Hibernate数据模型,如下所示 我打算创建如下实体 当我运行这个时,我得到以下错误 org.hibernate.MappingException:实体映射中的重复列:*。SSI 列:CLIENT_ID(应使用 insert=“false” update=“false”进行映射) 如果我设置为CLIENT_ID,它将再次错误关于插入的混合 如果我为所有
出于不需要透露的原因,我需要使用hibernate层运行一系列本机SQL语句。它们是相同的语句(相同的绑定变量),形式为“插入abc(column1,column2)值(:Column1List,:Column2List)”。
现在我有了hibernate的工作批插入(“hibernate.jdbc.batch_size=50”),但据我所知,hibernate会批量生成单个插入。我知道我可以告诉我的db驱动程序为每批插入创建多行插入,以使用rewriteBatchedStatements:jdbc:p加快性能ostgresql://localhost:5432/mydb?rewriteBatchedStatements
问题内容: 我看到了这个 在MySQL中,INSERT,UPDATE和DELETE语句的联接工作。在UPDATE或DELETE语句中联接表时,可以更改多个表中的数据。 回答mysql认证指南中的问题。是真的吗 插入连接?一个例子吗? 问题答案: 您可以使用mysql插入… SELECT,这可能就是他们的意思。例如:
当我进行插入时,在traduction(idMot references mot)中的外键为null,在前面发送正确的外键。我最终出现了这个错误:not-null属性引用了一个空值或临时值:com.virtual.expertise.mydico.model.traduction.mot 我想我在我的模型中做错了什么,但仍然不知道是什么。 下面是交易表: 下面是我的WebService:(其中id
问题内容: 我正在尝试像这样从C#向我的数据库中插入一个空值: DBNull.Value是日期可以在的地方,但我希望它等于null,但它似乎将默认日期设置为1900 … 问题答案: 改成: 返回空字符串,但您希望改为null。 但是,这种构建查询的方式可能会导致问题。例如,如果您的字符串之一包含引号’,则结果查询将引发错误。更好的方法是使用参数并在SqlCommand对象上进行设置: