Hướng dẫn spring mongodb enum mapping - bản đồ mùa xuân mongodb enum
Tôi muốn mã không ném ngoại lệ khi tải mã Java giá trị từ Mongo không tồn tại trong mã Enum Mẫu mực:
Vì điện thoại không tồn tại ở OrderOptionEnum Tôi chỉ muốn mã trả về giá trị null Bất kỳ ý tưởng ? Trân trọng Hỏi ngày 22 tháng 8 năm 2016 lúc 12:29Aug 22, 2016 at 12:29
2 Bạn có thể thêm một trình chuyển đổi tùy chỉnh triển khai 1 Có bạn triển khai logic chuyển đổi của riêng bạn từ chuỗi sang enum của bạn.một cái gì đó như thế này
Để ý !!! Bộ chuyển đổi này sẽ cố gắng chuyển đổi từng chuỗi trong Mongo thành Enum của bạn, do đó có thể dẫn đến các chuyển đổi không mong muốn, vì vậy hãy đảm bảo bạn chỉ làm điều này khi cần. Bạn có thể thêm 2 if you want this convert only when reading from mongo.Đã trả lời ngày 24 tháng 7 năm 2017 lúc 17:06Jul 24, 2017 at 17:06
YoniyoniYoni 3452 Huy hiệu bạc18 Huy hiệu đồng2 silver badges18 bronze badges Okay, Done! Download code ví dụ trên tại đây. Code ví dụ Hibernate @Enumerated, lưu dữ liệu dạng Enum. MySQL Đối tượng employee có column position (vai trò) . Bây giờ mình chỉ muốn position nhận các giá trị cố định
Cấu trúc Project
Các thư viện sử dụng File cấu hình hibernate, kết nối tới MySQL Trong ví dụ này mình sử dụng 4 nên sẽ khai báo file 5 nếu các bạn sử dụng 6 thì có thể khai báo file 7package stackjava.com.hibernatedemo.entities; public enum PositionEnum { DEVELOPER, TESTER, MANAGER, QA, BA; } File entity package stackjava.com.hibernatedemo.entities; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.EnumType; import javax.persistence.Enumerated; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name = "employee") public class Employee { @Id @Column(name = "id") @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; @Column(name = "name") private String name; @Column(name = "position") @Enumerated(EnumType.STRING) private PositionEnum position; // getter - setter @Override public String toString() { return "Employee [id=" + id + ", name=" + name + ", position=" + position + "]"; } } Annotation 9 sẽ đánh dấu field được lưu dạng enum, khi lưu vào database và đọc từ database ra, nó sẽ tự động lấy name của Enum đó.Demo 1:Insert đối tượng employee với field postion là 1 enum package stackjava.com.hibernatedemo.dao; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import stackjava.com.hibernatedemo.entities.Employee; import stackjava.com.hibernatedemo.entities.PositionEnum; public class DemoSave { public static void main(String[] args) { EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("persistence"); EntityManager entityManager = entityManagerFactory.createEntityManager(); entityManager.getTransaction().begin(); Employee emp = new Employee(); emp.setName("kai"); emp.setPosition(PositionEnum.DEVELOPER); entityManager.persist(emp); entityManager.getTransaction().commit(); System.out.println("---------- after save ---------------"); System.out.println(emp); entityManager.close(); entityManagerFactory.close(); } } Kết quả: Hibernate: insert into employee (name, position) values (?, ?) ---------- after save --------------- Employee [id=1, name=kai, position=DEVELOPER] Demo 2:Đọc dữ liệu từ database và gán vào field Enum. package stackjava.com.hibernatedemo.dao; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import stackjava.com.hibernatedemo.entities.Employee; public class DemoSelect { public static void main(String[] args) { EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("persistence"); EntityManager entityManager = entityManagerFactory.createEntityManager(); entityManager.getTransaction().begin(); Employee emp = entityManager.find(Employee.class, 1); System.out.println(emp); entityManager.getTransaction().commit(); entityManager.close(); entityManagerFactory.close(); } } Kết quả: 0Demo 2: Đọc dữ liệu từ database và gán vào field Enum. Nếu bạn vào database và sửa giá trị column position thành 1 giá trị khác không nằm trong các giá trị 3 nó sẽ báo lỗi vì không thể convert từ giá trị đó sang CREATE SCHEMA `hibernate-demo-1` ; CREATE TABLE `hibernate-demo-1`.`employee` ( `id` INT NOT NULL AUTO_INCREMENT, `name` VARCHAR(45) NULL, `position` VARCHAR(45) NULL, PRIMARY KEY (`id`));1 References: https://docs.jboss.org/…/html_single/#basic-enums |