我是JPA的小伙子,需要一些帮助。
我有一个父设计引用了一个子实体,我希望在没有子实体被持久化的情况下保持父实体,因为它已经存在于数据库中。
使用下面的代码,它会抛出一个“传递给持久化的分离实体”异常,我假设它正在这样做,因为它试图保留已经存在的条目。
public class Channels implements Serializable
{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@NotNull
@Column(name = "ID")
String id;
@Column(name = "name")
String name;
@Column(name = "shortCode")
String shortCode;
@Column(name = "loggerName")
String loggerName;
@Column(name = "SAFName")
String safName;
@Column(name = "Period")
int period;
@Column(name = "defaultErrorCode")
String defaultErrorCode;
@ManyToOne(cascade={CascadeType.MERGE, CascadeType.REFRESH})
@JoinColumn(name = "keySource", referencedColumnName = "source")
KeyGroup keySource; ///Child
public class KeyGroup implements java.io.Serializable
{
@Id
@Column(name = "source")
String source;
@Column(name = "parentKey")
private String parentKey;
@Column(name = "parentKeyCheckValue")
private String parentKeyCheckValue;
@Column(name = "parentKeyParity")
private String parentKeyParity;
@Column(name = "childKey")
private String childKey;
@Column(name = "childKeyCheckValue")
private String childKeyCheckValue;
Form<?> form = new Form<Void>("form")
{
@Override
public void onSubmit()
{
Channels channels = new Channels();
KeyGroup keyGroup = keyGroupServiceProvider.getKeyGroup(keySource.getModelObject().getSource());
channels.setId(id.getModelObject());
channels.setName(channelName.getModelObject());
channels.setShortCode(channelShortCode.getModelObject());
channels.setLoggerName(loggerName.getModelObject());
channels.setSafName(SAFName.getModelObject());
channels.setPeriod(Integer.parseInt(period.getModelObject()));
channels.setDefaultErrorCode(defaultErrorCode.getModelObject());
try
{
channelServiceProvider.addChannel(channels, keyGroup);
info("done");
}
EntityManager entityManager;
。 。 。
public void addChannel(Channels channels, KeyGroup keyGroup)
{
try
{
channels.setKeySource(keyGroup);
entityManager.persist(channels);
}
catch (Exception e)
{
e.printStackTrace();
}
先谢谢你们