需要JPA ManyToOne关系帮助

时间:2014-09-17 08:33:52

标签: java many-to-one

我是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();
    }

先谢谢你们

0 个答案:

没有答案