gpt4 book ai didi

java - ID 为自动增量时无法克隆 Model.Object

转载 作者:行者123 更新时间:2023-12-02 03:10:31 26 4
gpt4 key购买 nike

我实现了可克隆接口(interface)来克隆我的对象(复制按钮1或多个对象),但是,当模型的Id自动递增时,object.save();不起作用!我在网上尝试了很多解决方案,但没有办法!

1- 在我的模型中:

@Override
public Computer clone()
{

try
{
Computer nouveau = (Computer) super.clone();
return nouveau;
}

catch (CloneNotSupportedException e)
{
e.printStackTrace();
throw new RuntimeException();
}
}

Controller :

public Result CopyComputers(Long selected)
{
Computer c = Computer.find.byId(selected);
Computer cClone = c.clone();
Logger.debug("Object is perfectly copied and ID TOO !!!! : "+cClone);
cClone.save(); // never works coz id is the one from primary model object.

}

我尝试了这些解决方案,但没有一个有效!1-在保存之前将 id 设置为 NULL...2-代型如下图

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(columnDefinition = "serial")
public Long id;

有人有想法吗?因为如果我的对象有很多或一个其他列......我不能每次都这样做:

public Result CopyComputers(String selected)
{



//Computer cClone = c.clone();

String[] ids = selected.split(";");

for (String temp : ids)
{
Computer c = Computer.find.byId(Long.parseLong(temp));
try
{

Computer n = new Computer();
if (c != null)
{
n.name = c.name;
n.status = c.status;
n.introduced = c.introduced;
n.discontinued = c.discontinued;
n.createdt = c.createdt;
n.createby = c.createby;
n.moddt = c.moddt;
n.modby = c.modby;
n.site = c.site;
n.company = c.company;

n.save();
Logger.debug("zzzzzzzz : "+n.id +" "+c.id);
}
//cClone.save();

}

catch (Exception e)
{
Logger.error("Clone error", e);

}



Logger.info("Computer Object "+temp+" has been Copied");

} // end for

return GO_HOME;

}

最佳答案

您不需要(也不应该)在 Ebean 实体 bean 上使用克隆。相反,您可以将 id 值设置为 null 并使用显式 insert() ,例如:

Computer c = Computer.find.byId(selected);
// null out the current id value if you are
// inserting back into the same db
c.setId(null);

// use explicit insert. This tells Ebean to ignore the
// state of the entity and forces a sql insert
c.insert();

请注意,您也可以使用 BeanState.resetForInsert()当插入/保存级联到您也想复制的关联 bean 时,您可以执行此操作。

也就是说,在调用 insert() 之前(将级联到关联的 bean),我们应该修改那些相关/关联的 bean,将其 id 值设置为 null 并调用 Ebean.getBeanState(otherBean).resetForInsert() ...因此这些其他相关的 bean 也被插入。

关于java - ID 为自动增量时无法克隆 Model.Object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41109358/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com