gpt4 book ai didi

java - 为什么实体没有存储在数据库中?

转载 作者:太空宇宙 更新时间:2023-11-03 11:25:27 25 4
gpt4 key购买 nike

我有两张相关的面孔。保存到数据库时,只有一个对象保存成功。第二个带有外键的不保存。第二个有外键的是 List objects 请帮忙。

这里我加了cascade = CascadeType.ALL,还是不行

@Entity
@Table(name = "MyOrder")
public class MyOrder {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;

@OneToMany(mappedBy = "myOrder")
private List<Products> productses;

我添加了 fetch = Fetch.LAZY,这也没有帮助。

@Entity
@Table(name = "Products")
public class Products {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;

@ManyToOne
@JoinColumn(name = "product_myorder_id")
private MyOrder myOrder;

在 Controller 中我填充它:

        MyOrder myOrder = new MyOrder();
List<Products2> products2s = object.getProductses2();
List<Products> productses = new ArrayList<Products>();
for(int i =0;i<products2s.size();i++){
Products2 products2 = products2s.get(i);
Products products = new Products();

products.setName(products2.getName());
products.setWeight(products2.getWeight());
products.setAmount(products2.getAmount());
products.setPrice(products2.getPrice());
productses.add(products);

}
myOrder.setProductses(productses);
//saving
serviceClass.createNewOrder(myOrder);

服务等级:

    @Repository
@Transactional
public class MyServiceClass {

@Autowired
@Qualifier(value = "sessionFactory")
SessionFactory session;



public boolean createNewOrder(MyOrder myOrder){
session.getCurrentSession().save(myOrder);
return true;
}

}

架构:

CREATE TABLE `myorder` (
`myOrder_id` int(11) NOT NULL AUTO_INCREMENT,
`date` varchar(255) DEFAULT NULL,
`status` varchar(255) DEFAULT NULL,
`myorder_company_id` int(11) DEFAULT NULL,
`myorder_courier_id` int(11) DEFAULT NULL,
PRIMARY KEY (`myOrder_id`),
KEY `FK_q6alh4tjuhyudpq770duori5h` (`myorder_company_id`),
KEY `FK_lcjnn2172xke45f2gmsiyvtep` (`myorder_courier_id`),
CONSTRAINT `FK_lcjnn2172xke45f2gmsiyvtep` FOREIGN KEY (`myorder_courier_id`) REFERENCES `courier` (`id`),
CONSTRAINT `FK_q6alh4tjuhyudpq770duori5h` FOREIGN KEY (`myorder_company_id`) REFERENCES `company` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;


CREATE TABLE `products` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`amount` varchar(255) DEFAULT NULL,
`consignation` bit(1) NOT NULL,
`debt` bit(1) NOT NULL,
`description` varchar(255) DEFAULT NULL,
`name` varchar(255) DEFAULT NULL,
`photo` varchar(255) DEFAULT NULL,
`price` varchar(255) DEFAULT NULL,
`rec_price` varchar(255) DEFAULT NULL,
`returned` bit(1) NOT NULL,
`weight` varchar(255) DEFAULT NULL,
`product_categories_id` int(11) DEFAULT NULL,
`product_company_id` int(11) DEFAULT NULL,
`product_myorder_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `FK_ovaxmqou7gnwgchnhbkp9tq1p` (`product_categories_id`),
KEY `FK_kwu6gyind0d2bthu19fcrkkcf` (`product_company_id`),
KEY `FK_jeh86q0ligae6ggjlq9lq89y5` (`product_myorder_id`),
CONSTRAINT `FK_jeh86q0ligae6ggjlq9lq89y5` FOREIGN KEY (`product_myorder_id`) REFERENCES `myorder` (`myOrder_id`),
CONSTRAINT `FK_kwu6gyind0d2bthu19fcrkkcf` FOREIGN KEY (`product_company_id`) REFERENCES `company` (`id`),
CONSTRAINT `FK_ovaxmqou7gnwgchnhbkp9tq1p` FOREIGN KEY (`product_categories_id`) REFERENCES `categories` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;

最佳答案

您应该考虑以下映射:

  • 对 id 列使用 Long,而不是 int - int 太小
  • 双向映射可能更好
  • 具有用于添加/删除子项的实用方法(如以下代码所示)
  • 在实体类中初始化您的集合以避免空值

例子:

@Entity(name = "MyOrder")
@Table(name = "myorder")
public class MyOrder {
@Id
@GeneratedValue
private Long id;

@OneToMany(mappedBy = "myorder", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Product> products = new ArrayList<>();

//Constructors, getters, setters etc.

public void addProduct(Product product) {
products.add(product);
product.setMyOrder(this);
}

public void removeProduct(Product product) {
products.remove(product);
product.setMyOrder(null);
}
}

@Entity(name = "Product")
@Table(name = "product")
public class Product {

@Id
@GeneratedValue
private Long id;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "myorder_id")
private MyOrder myOrder;

//Constructors, getters and setters

//equals and hashCode
}

关于java - 为什么实体没有存储在数据库中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54725121/

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