如何在使用javax.persistence.schema-generation.database.action时向现有数据库表中添加新列

g0czyy6m  于 2023-08-01  发布在  Java
关注(0)|答案(1)|浏览(194)

我正在NetBeans中开发一个三层Java企业应用程序,该架构包括表模型,表交互的外观,JavaBeans作为控制器,以及用于显示的XHTML网页。
我有一个从实体类生成的“Booking”表,其中包含主键ID、状态和日期。我需要添加新列(FOOD、SEATS和RATING),但这样做会导致在导航到从表中调用对象的网页时出现以下错误。
第一个月
根据我得到的错误消息,我假设问题是Java没有在现有的Booking表上创建新列。我该怎么解决这个问题?
我发现这个question与我的问题类似。但是我使用的是javax持久化而不是eclipse。如何在不完全删除表的情况下向表中添加另一列?
我在persistence.xml中有以下行,但是新列仍然没有生成<property name="javax.persistence.schema-generation.database.action" value="create"/>
我还尝试在我的模型中的变量声明上标记列名,如下所示,尽管它似乎没有做任何事情,因为列不是首先生成的。

  1. public class Booking implements Serializable {
  2. private static final long serialVersionUID = 1L;
  3. @Id
  4. @GeneratedValue(strategy = GenerationType.IDENTITY)
  5. @Column(name = "ID")
  6. private Long id;
  7. @Temporal(TemporalType.DATE)
  8. private Date bookingDate;
  9. private String status;
  10. @Column(name = "FOOD")
  11. private String food;
  12. @Column(name = "SEATS")
  13. private Long seats;
  14. @Column(name = "RATING")
  15. private Long rating;
  16. @Column(name = "REVIEW")
  17. private String review;
  18. private Long assignedKitchenStaffId;
  19. private Long customerId;
  20. @JoinColumn(name = "ASSIGNEDKITCHENSTAFF_ID")
  21. @ManyToOne
  22. private User assignedKitchenStaff;
  23. @JoinColumn(name = "CUSTOMER_ID")
  24. @ManyToOne
  25. private User customer;

字符串

weylhg0b

weylhg0b1#

我想出了一个方法来添加新的列。通过将persistence.xml中的模式生成属性的值从“create”修改为“drop-and-create”,如下所示

  1. <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>

字符串
它的一个问题是它会删除整个数据库,因此数据库中的所有数据都将丢失。虽然我的项目不是用于生产的,所以我能够承受为表创建额外列而丢失数据的成本。希望这能帮上忙

相关问题