使用 JPA 我有一个数据配置,可以毫无问题地添加到数据库中:
@Entity @Table(name = "dataConfigurations", uniqueConstraints = {@UniqueConstraint(columnNames = {"name"})})
@NamedQueries({@NamedQuery(name = "DataConfigurations.names", query = "SELECT d.name FROM DataConfiguration d"), @NamedQuery(name = "DataConfiguration.findByName", query = "SELECT d FROM DataConfiguration d WHERE d.name = :name")})
public class DataConfiguration implements Serializable
{
@Transient
private static final long serialVersionUID = 1L;
@Id //@GeneratedValue(strategy = GenerationType.)
//@TableGenerator(name = "dataConfigurationSequence", table = "Sequences", pkColumnName = "NameSequences", valueColumnName = "valueSequence", pkColumnValue = "dataConfigurationId")
private long id;
@OneToMany(mappedBy = "dataConfiguration", cascade = CascadeType.ALL)
private List<Content> contents; // "Data" is a reserved SQL word.
@ManyToMany(mappedBy = "dataConfigurations", cascade = CascadeType.ALL)
private List<LabelType> labelTypes;
private String name;
@OneToMany(mappedBy = "dataConfiguration", cascade = CascadeType.ALL
private List<Template> templates;
这个Dataconfiguration包含一个Contents列表(一对多关系), 其他映射(模板和标签类型目前无关紧要,但稍后会在我的程序中出现,它们可能会给我带来与内容相同的问题)
@Entity @Table(name = "contents", uniqueConstraints = {@UniqueConstraint(columnNames = {"dataConfigurationId", "displayOrder"})})
public class Content implements Serializable
{
@Transient
private static transient final long serialVersionUID = 1L;
@Id //@GeneratedValue(strategy = GenerationType.IDENTITY)
//@TableGenerator(name = "contentSequence", table = "Sequences", pkColumnName = "NameSequences", valueColumnName = "valueSequence", pkColumnValue = "contentId")
private long id;
private String content; // "Data" is a reserved word in traditional SQL.
@ManyToOne(optional = false, fetch = FetchType.LAZY, cascade = CascadeType.ALL) @JoinColumn(name = "dataConfigurationId")
private DataConfiguration dataConfiguration;
private int displayOrder;
private int editableFrom;
private String typeDiscriminator;
这是启动保存方法的 Controller 方法:
public String saveDataConfiguration()
{
dataConfiguration = new DataConfiguration(getNextId(), dataConfigurationName, contents);
dataConfigurationFacade.create(dataConfiguration);
return null;
}
create 方法是 AbstractFacade 的一部分
public void create(T entity)
{
getEntityManager().persist(entity);
getEntityManager().flush();
}
当我执行该方法时,除了内容表中数据配置的 Id 之外的所有内容都被保存。 (数据配置的外键不保存在内容中) 任何提示和/或提示都会非常有帮助!
最佳答案
您可能忘记了初始化每个内容的字段dataConfiguration
。这是映射到连接列的那个,因此它是 Hibernate 检查以确定两个实体之间是否存在关联的那个。
关于java - JPA 不会将 Id 从包装对象添加到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8598925/