- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我使用迭代来保存集合中的所有实体。然后我就有这个问题了。我尝试了persist()和merge(),但实体的Id似乎从未改变。如果有人能提供帮助,我将不胜感激。
我的道
@Repository
public class SaleOrderDAOImpl implements SaleOrderDAO{
@PersistenceContext
private EntityManager em;
@Override
public void save(SaleOrder sale) {
// TODO Auto-generated method stub
if(sale.getId() == null)em.persist(sale);
else
em.merge(sale);
}
@Override
public SaleOrder getById(Integer id) {
// TODO Auto-generated method stub
return em.find(SaleOrder.class,id );
}
}
相关功能
@Override
public Set<SaleOrder> generateOrder(Integer cus_id) {
// TODO Auto-generated method stub
Set<SaleOrder> orders = new HashSet<>();
Customer consumer = (Customer) userDAO.findUserById(cus_id);
if(consumer == null) throw new NullPointerException();
Cart cart = consumer.getCart();
System.out.println(cart);
if(cart == null) return null;
// 生成订单
SaleOrder fake = new SaleOrder();
fake.setProvider(new Artist());
orders.add(fake);
boolean flag = false;
for(CartItem item :cart.getItems()){
Artist seller = item.getProduct().getSeller();
flag = false;
while(true){
for(SaleOrder order:orders)
if(order.getProvider().equals(seller))order.getItems().add(item);
else{
SaleOrder another = new SaleOrder();
another.getItems().add(item);
another.setProvider(seller);
another.setConsumer(consumer);
orders.add(another);
flag = true;
break;
}
if(flag == true) break;
}
}
orders.remove(fake);
Iterator iter = orders.iterator();
SaleOrder order;
while(iter.hasNext()){
order = (SaleOrder) iter.next();
order.calcTotal();
soDAO.save(order); // call SaleOrderDAO, and problem occurs here.
}
// 清空购物车
cart.Empty();
return orders;
}
我的 SaleOrder 类
@Entity
@Table(name ="myorder")
@DiscriminatorValue("Sale")
public class SaleOrder extends Order {
// private List<Feedback> feedbacks;
@OneToMany(mappedBy="order")
private Set<CartItem> items;
@OneToOne(cascade = CascadeType.ALL,mappedBy="order")
private Payment payment;
private Double total;
// constructor
public SaleOrder(){
this.setStatus("Unpaid");
}
// BusinessLogic
public void calcTotal(){
Double total = 0.0;
for(CartItem item:items){
total+= item.getProduct().getPrice()*item.getQuantity();
}
this.total=total;
}
public void changeStatus(){
if(payment.isPaid())this.setStatus("Paid");
}
@Override
public void specify(){
super.specify();
total += this.getShipment().getPrice();
this.payment = new Payment(total);
}
我的订单.class
@Entity
@Table(name = "myorder")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class Order{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@ManyToOne( fetch = FetchType.LAZY)
@MapsId
@JoinColumn(name = "consumer_id")
private Customer consumer; // 下订单的人
@ManyToOne(fetch = FetchType.LAZY)
@MapsId
@JoinColumn(name = "provider_id")
private Artist provider; // 即卖家
private String status;
@OneToOne(targetEntity = Address.class,fetch = FetchType.EAGER)
private Address addr;
@Column(columnDefinition = "timestamp on update current_timestamp")
private Timestamp orderDate;
@OneToOne(cascade = CascadeType.ALL,targetEntity = Shipment.class,fetch = FetchType.EAGER)
private Shipment shipment;
// Business Logic
/**
* 生成最终订单
*/
public void specify(){};
/**
* 更改订单支付状态
*/
public void changeStatus(){};
// getters and setters
提前致谢。
最佳答案
虽然我没有 SaleOrder
类可供查看,但我认为有两件事:
1) id
类型是 String 并初始化为“”。在这种情况下,请确保将其初始化为 null
2) id
类型是 int 或主要类型。在这种情况下,我建议将其更改为 Integer 之类的 Object 类型,然后将其初始化为 null。
关于java - 如何解决javax.persistence.EntityExistsException : a different object with the same identifier value was already associated with the session,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34356835/
我知道这类问题已经得到解答,但就我而言,我已经尝试了所有配置,但仍然不起作用。我需要对我的配置有一个新的看法(我确信我错过了一些东西)。两个附加程序都会记录所有级别 我想将所有包的信息 >= 记录到控
我正在对 Windows 移动设备上的代码性能进行一些基准测试,并注意到某些算法在某些主机上的表现明显更好,而在其他主机上则明显更差。当然,考虑到时钟速度的差异。 供引用的统计数据(所有结果均由同一个
我有一个程序可以计算多边形的面积和周长。程序还会确认面积和周长的计算结果是否与预期结果相同。 我不明白发生了什么,但确认面积和周长是否与预期相同的验证部分无法正常工作。 例如,我现在测试并在所有情况下
Codepen :(对于那些想直接进入的人来说,这是一个代码笔。在 Chrome 和 IE 中尝试一下,看看结果的不同) 我正在尝试使用 css3 转换/过渡,因为它们比 jquery 效果更流畅。
我有几个不同的正则表达式要在给定文本中匹配和替换。 regex1 :如果文本包含单词“Founder”,则将所有文本替换为首席执行官 正则表达式2:如果文本包含9位数字,则将其替换为NUM 我尝试使用
我编写了多线程应用程序,它从每个线程的数据库连接到一些电子邮件帐户。我知道 JavaMail 没有任何选项可以使用 SOCKS5 进行连接,因此我决定通过 System.setProperty 方法使
如您所见,这是我当前 Storyboard的不同设备预览。底部的透明绿色被另一个 View Controller 占用,但需要为每个不同的尺寸类固定间距。我尝试将 Storyboard 中的宽度和高度
我正在创建一个游戏,我需要能够改变玩家 Sprite 的速度。我认为最好的选择是通过重力影响 Sprite 。为了给用户运动的感觉,我希望背景以完全相同的速度向相反的方向移动。 我怎样才能给背景一个不
我正在查看BTrees库并注意到有多个 TreeSet (和其他)类,例如 BTrees.IOBTree.TreeSet BTrees.OOBTree.TreeSet BTrees.LFBTree.T
我有一个小型 C++ 库,必须为 armeabi 和 armeabi7a 编译。我还有一个非常大的 c++ 库,只需要为 armeabi 编译。现在正在为两种架构编译它们(使用 NDK),但这使我的
我需要根据站点的当前部分稍微更改主题。 似乎 MuiThemeProvider 只在加载时设置 muiTheme;但需要在 props 变化时更新。 如何做到这一点? 最佳答案 您可以尝试将主题放在包
如何创建两个每个都有自己的计数器的 lSTListing 环境? 如果我使用例如 \lstnewenvironment{algorithm}[2]{ \renewcommand\lstlist
我想使用 Travis-CI 和 Github 基于分支设置部署。 IE。 - 如果我们从 develop 构建- 然后执行 /deploy.rb使用 DEV 环境主机名,如果 master - 然后
我有一个带有数据验证的 WPF MVVM 数据表单窗口。很多控件都是文本框。目前,数据绑定(bind)触发器设置为默认值,即。 e.失去焦点。这意味着仅在可能完全填写字段时才对其进行验证。所以当删除一
我有许多应用程序的内容页面,并最终为每个内容页面编写了很多 View 模型。例如。如果我有一个包含项目组的列表,我将有一个 ShowAllViewModel并绑定(bind)到内容页面和列表中单个项目
我有一个通用 View 和 4 个其他 View 。我在通用 View 中使用 Bootstrap 选项卡(导航选项卡)。我希望其他 4 个 View 成为通用 View 中 4 个选项卡的内容。由于
我希望针对 Maven 发布插件的不同目标有不同的配置选项。故事是这样的: 我正在将 Git 用于 SCM。我希望release:prepare插件在本地完成所有操作,并让release:perfor
我正在为一个项目使用AbstractTableModel制作一个自定义TableModel,并且我需要找到一种方法让复选框显示在某些行上,而不是其他行上。我已经实现了 getColumn 方法,但我希
摘自《Javascript 忍者的 secret 》一书: EVENTS ARE ASYNCHRONOUS Events, when they happen, can occur at unpredi
我正在尝试配置我的第一个 GWT 记录器,到目前为止,我已经将日志消息打印到我的 JS 控制台(FF 的 Firebug): 最终,我希望非SEVERE 消息转到consoleHa
我是一名优秀的程序员,十分优秀!