我有两个实体。一种称为EntityPojo,另一种称为ChunkPojo。EntityPojo不了解ChunkPojo。ChunkPojo对EntityPojo有1:1的引用。首先,我保存EntityPojo,然后保存ChunkPojo。
在保存ChunkPojo时,休眠状态尝试插入引用的1:1 EntityPojo,这将导致重复的键异常。但是...级联被禁用,这不应该发生。
/** The base for all database objects
*/
@MappedSuperclass
public abstract class DatabaseObject extends Component{
@Id
public Long id;
@MapsId
@JoinColumn(name = "id")
@OneToOne(cascade = {})
public EntityPojo entityPojo;
}
@Entity
@Table(name = "entity")
@Access(AccessType.FIELD)
public class EntityPojo {
@Id public long id;
public long version;
public String tag;
public String typeID;
public EntityPojo() { }
}
/**
* A chunk which extends DatabaseObject.
*/
@Entity
@Table(name = "chunk", uniqueConstraints = {@UniqueConstraint(columnNames={"x", "y"})}, indexes = {@Index(columnList = "x,y")})
@Access(value = AccessType.FIELD)
@SelectBeforeUpdate(value = false)
public class ChunkPojo extends DatabaseObject {
public int x;
public int y;
public Date createdOn;
}
public static void main(String[] args){
var enitity = new EntityPojo();
enitity.id = 1;
enitity.tag = "player";
enitity.typeID = "1:1";
var chunk = new ChunkPojo();
chunk.x = 10;
chunk.y = 11;
chunk.entityPojo = enitity;
chunk.id = enitity.id;
syncDatabase.save(enitity); // Just calls session.persist - works fine
syncDatabase.save(chunk); // Also calls session.persist - exception
}
当我在这里显然没有使用任何级联时,为什么休眠会尝试插入引用的1:1关系?我如何防止它发生呢?
很高兴为您提供有关此主题的任何帮助!它让我疯狂 !谢谢 !
我认为发生的事情是该@MapsId
注释告诉Hibernate取得IDchunk
并将其映射到的ID字段entity
。因此chunk
,即使没有明确要求保存,保存时也会自动保留级联。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句