Ánh xạ enum mùa xuân mongodb

Tôi muốn mã không ném ngoại lệ khi mã java tải giá trị enum từ mongo không tồn tại trong mã enum

Ví dụ

java.lang.IllegalArgumentException: No enum constant fr.myapp.type.OrderOptionEnum.TELEPHONE
at java.lang.Enum.valueOf(Enum.java:238)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.getPotentiallyConvertedSimpleRead(MappingMongoConverter.java:819)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.readCollectionOrArray(MappingMongoConverter.java:909)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.readValue(MappingMongoConverter.java:1184)

Bởi vì ĐIỆN THOẠI không tồn tại trong Order Option Enum

Tôi chỉ muốn mã trả về giá trị null

Bất kỳ ý tưởng ?

Trân trọng

Giải pháp tốt nhất

bạn có thể thêm triển khai trình chuyển đổi tùy chỉnh Converter ở đó bạn triển khai logic chuyển đổi của riêng mình từ chuỗi sang enum của bạn

một cái gì đó như thế này

public class OrderOptionEnumMongoConverter implements Converter {

    @Override
    public OrderOptionEnum convert(String source) {

        for (OrderOptionEnum OrderOptionEnum : OrderOptionEnum.values()) {
            if (OrderOptionEnum.name().equals(source))
                return OrderOptionEnum;
        }

        return null;
    }
}

Lưu ý. Trình 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ỉ thực hiện việc này khi cần. bạn có thể thêm @ReadingConverter nếu bạn chỉ muốn chuyển đổi này khi đọc từ mongo

Giải pháp liên quan

Eclipse – Cách giải quyết “Thực thi plugin không nằm trong cấu hình vòng đời” cho Bản dựng Maven dữ liệu mùa xuân

In my case of a similar problem, instead of using Andrew's suggestion for the fix, it worked simply after I introduced tag to the pom.xml in question. Looks like that error is due to a missing tag. So, in order to avoid the exceptions in Eclipse, one needs to simply enclose all the plugin tags inside a tag, like so:


    
        
             .. 
             .. 
                  ....
        
    

Khi cấu trúc này được đặt đúng chỗ, lỗi sẽ biến mất

Java – Đâu là sự khác biệt giữa các chú thích @Component, @Repository & @Service trong Spring

Từ tài liệu mùa xuân

Chú thích @Repository là điểm đánh dấu cho bất kỳ lớp nào đáp ứng vai trò hoặc khuôn mẫu của kho lưu trữ (còn được gọi là Đối tượng truy cập dữ liệu hoặc DAO). Trong số các cách sử dụng điểm đánh dấu này là dịch tự động các ngoại lệ, như được mô tả trong Bản dịch ngoại lệ

Spring cung cấp thêm các chú thích khuôn mẫu. @Component, @Service@Controller. @Component là một khuôn mẫu chung cho bất kỳ thành phần nào do Spring quản lý. @Repository, @Service@Controller là các chuyên biệt hóa của @Component cho các trường hợp sử dụng cụ thể hơn (tương ứng trong các lớp kiên trì, dịch vụ và trình bày). Do đó, bạn có thể chú thích các lớp thành phần của mình bằng @Component, nhưng thay vào đó, bằng cách chú thích chúng bằng @Repository, @Service hoặc @Controller, các lớp của bạn phù hợp hơn để xử lý bằng các công cụ hoặc liên kết với các khía cạnh.

Ví dụ: các chú thích khuôn mẫu này tạo ra các mục tiêu lý tưởng cho các điểm cắt. @Repository, @Service@Controller cũng có thể mang ngữ nghĩa bổ sung trong các bản phát hành Spring Framework trong tương lai. Do đó, nếu bạn đang lựa chọn giữa việc sử dụng @Component hoặc @Service cho lớp dịch vụ của mình, thì rõ ràng @Service là lựa chọn tốt hơn. Tương tự, như đã nêu trước đó, @Repository đã được hỗ trợ làm điểm đánh dấu để dịch ngoại lệ tự động trong lớp kiên trì của bạn

Chú thích Ý nghĩa@Componentkhuôn mẫu chung cho bất kỳ thành phần nào do Spring quản lý@Repositorykhuôn mẫu cho lớp kiên trì@Servicekhuôn mẫu cho lớp dịch vụ@Controllerkhuôn hình cho lớp trình bày (spring-mvc)

Cách tạo và xác thực Lược đồ JSON trong Bộ sưu tập MongoDB MongoDB đã rất khôn ngoan khi áp dụng tiêu chuẩn Lược đồ JSON để xác thực các thay đổi trong dữ liệu. Đó là một tiêu chuẩn cho phép kiểm tra dữ liệu tài liệu bằng nhiều công cụ khác nhau trước khi nó được nhập vào cơ sở dữ liệu

Từ khóa “enum” được sử dụng để khai báo một kiểu liệt kê. Đây là cú pháp của enum trong ngôn ngữ C, enum enum_name{const1, const2,. }; . Có 2 cách định nghĩa các biến kiểu enum như sau

Dữ liệu mùa xuân Mongodb có thể tuần tự hóa enum thành chuỗi bằng cách sử dụng tên của enum làm giá trị. Giả sử, nó sử dụng cách tiếp cận thứ hai từ bài viết http. //www. cây nho. com/2010/01/3-way-to-serialize-java-enums/

dữ liệu mùa xuân-mongodb. cách tìm tài liệu bằng cách chuyển thuộc tính ngẫu nhiên và giá trị của nó

liệt kê. Mỗi enum có trang riêng với các phần sau. khai báo Enum; . Mỗi gói tài liệu, lớp và giao diện có trang Sử dụng riêng. Trang này mô tả những gói, lớp, phương thức, hàm tạo và trường nào sử dụng bất kỳ phần nào của lớp hoặc gói đã cho

Spring Data Demo Trong bản demo này, chúng tôi giải thích cách sử dụng cơ bản của Spring Data ArangoDB với tất cả các tính năng chính của nó. Tập dữ liệu trong bản demo này bao gồm các nhân vật và địa điểm của Game of Thrones từ phần đầu tiên

Rất gọn gàng, nhưng không hiệu quả với tôi (mongoose 3. 6. 20). đối với hàm path(), các trường enum của tôi phải có tiền tố là ". enum" và không có thuộc tính "enumValues" trên đối tượng được trả về

trong khi enum thường có nghĩa là giá trị không bao giờ được xác định hoặc giá trị là một trong những giá trị được phép. Vì vậy, về cơ bản, enum kiểm tra giá trị dựa trên một tập hợp các giá trị, phải không?

GPIO. set_button_handler(pin, pull, intmode, period, handler) Cài đặt trình xử lý nút GPIO. pull là kiểu kéo, intmode là chế độ ngắt, period là khoảng thời gian gỡ lỗi tính bằng mili giây, trình xử lý là hàm nhận số pin

Phần còn lại của hướng dẫn này chỉ ra cách xác định và truy cập lược đồ và mô hình Mongoose cho ví dụ về trang web LocalLibrary. Thiết kế các mô hình LocalLibrary. Trước khi bạn tham gia và bắt đầu mã hóa các mô hình, bạn nên dành vài phút để suy nghĩ về dữ liệu nào chúng ta cần lưu trữ và mối quan hệ giữa các đối tượng khác nhau

Mongoose cũng hỗ trợ xác thực cho các hoạt động update(), updateOne(), updateMany() và findOneAndUpdate(). Trình xác thực cập nhật bị tắt theo mặc định - bạn cần chỉ định tùy chọn runValidators. Để bật trình xác nhận cập nhật, hãy đặt tùy chọn runValidators cho update() , updateOne() , updateMany() hoặc findOneAndUpdate()

Mongoose hỗ trợ các mảng SchemaTypes và mảng các tài liệu con. Mảng của SchemaTypes còn được gọi là mảng nguyên thủy và mảng của tài liệu con còn được gọi là mảng tài liệu

Việc liệt kê cung cấp sự hiểu biết rõ ràng về tập hợp các giá trị có thể được sử dụng cho một thuộc tính. Điều này đảm bảo chúng ta có thể hạn chế đầu vào cho tập hợp các giá trị trong kiểu liệt kê. Việc liệt kê cũng báo hiệu cho người đọc hành vi dự định của các phiên bản mô hình (đặc biệt nếu trường liệt kê được sử dụng trong máy trạng thái)

Truyền chạy trước khi xác thực và xác thực không chạy nếu truyền không thành công. Điều đó có nghĩa là trình xác thực tùy chỉnh của bạn có thể cho rằng v là null , undefined hoặc một phiên bản thuộc loại được chỉ định trong lược đồ của bạn

Nhà tài trợ Automattic/mongoose Watch 556 Fork 2 Tạo mảng enums #661. true không hoạt động trong mảng #1277

Các phương thức Ngày tích hợp không được nối vào logic theo dõi thay đổi của cầy mangut, điều này trong tiếng Anh có nghĩa là nếu bạn sử dụng một Ngày trong tài liệu của mình và sửa đổi nó bằng một phương thức như setMonth(), thì cầy mangut sẽ không biết về sự thay đổi này và tài liệu. save() sẽ không duy trì sửa đổi này

Để hỗ trợ sharding dựa trên hàm băm, MongoDB cung cấp loại chỉ mục được băm, loại chỉ mục này lập chỉ mục cho hàm băm của giá trị của một trường. Các chỉ mục này có phân phối giá trị ngẫu nhiên hơn dọc theo phạm vi của chúng, nhưng chỉ hỗ trợ đối sánh bằng và không thể hỗ trợ các truy vấn dựa trên phạm vi

Bài đăng này là một phần của loạt bài có tên Giới thiệu về Mongoose cho MongoDB và Node. js. Nhập hàng loạt tệp CSV vào MongoDB bằng Mongoose với nút. js Mongoose là một khung JavaScript thường được sử dụng trong Nút. js với cơ sở dữ liệu MongoDB

MongoDB cung cấp khả năng thực hiện xác thực lược đồ trong quá trình cập nhật và chèn

Điều này có thể lưu thành công hay không, tùy thuộc vào việc // MongoDB có xây dựng chỉ mục trước khi viết 2 tài liệu hay không. }); . Bạn chỉ cần xây dựng các chỉ mục một lần cho // một bộ sưu tập nhất định, vì vậy thông thường bạn không cần phải làm điều này // trong sản xuất

Một enum đại diện cho loại hoạt động cho sự kiện thay đổi này. chèn. Chỉ định một thao tác kiểu chèn

MongoDB hỗ trợ bản nháp 4 của Lược đồ JSON, bao gồm đặc tả cốt lõi và đặc tả xác thực, với một số khác biệt. Xem Tiện ích mở rộng và Thiếu sót để biết chi tiết. Để biết thêm thông tin về Lược đồ JSON, hãy xem trang web chính thức

Tuy nhiên, nếu enum là thiết bị thích hợp trong C# -- và bạn chắc chắn rằng mã C# sẽ thúc đẩy bất kỳ thay đổi nào, chứ không phải cơ sở dữ liệu -- phương pháp ưu tiên của tôi là lưu trữ loại giá trị cơ bản trong cơ sở dữ liệu (bigint, int,

Bằng cách giữ enum trong cơ sở dữ liệu của bạn và thêm khóa ngoại trên bảng có chứa giá trị enum, bạn đảm bảo rằng không có mã nào nhập sai giá trị cho cột đó. Điều này giúp toàn vẹn dữ liệu của bạn và là lý do rõ ràng nhất IMO bạn nên có các bảng cho enums

Tuy nhiên, có nhiều cách tiếp cận tương tự như lưu trữ chuỗi trong cơ sở dữ liệu (đặc biệt là MySQL) hiệu quả. Đầu tiên, MySQL có một kiểu enum có thể trông rất giống một chuỗi Boolean hoặc bị hạn chế khi thiết lập theo cách đó. Nó cũng bắt buộc chỉ nhập các giá trị hợp lệ

Hệ thống con ánh xạ Spring Data MongoDB lấy một lớp miền như thế này và chuyển đổi nó thành một MongoDB DBObject. Theo mặc định, trường có tên 'id' hoặc '_id' sẽ được sử dụng làm trường ID của tài liệu

Cơ sở hạ tầng siêu dữ liệu ánh xạ được xác định trong một dự án chung dữ liệu mùa xuân riêng biệt là công nghệ bất khả tri. Các lớp con cụ thể đang sử dụng trong hỗ trợ MongoDB để hỗ trợ siêu dữ liệu dựa trên chú thích. Các chiến lược khác cũng có thể được đưa ra nếu có nhu cầu. Đây là một ví dụ về ánh xạ phức tạp hơn

Ánh xạ Enums được thực hiện ngay với @Convert trong JPA 2. 1 (Kiểu liệt kê. ORDINAL) (mặc định) sẽ ánh xạ các giá trị enum bằng Enum. thứ tự(). ứng dụng web mẫu Spring có sẵn trên GitHub

Hỗ trợ cấu hình mùa xuân bằng cách sử dụng các lớp @Configuration dựa trên Java hoặc một không gian tên XML cho một phiên bản trình điều khiển Mongo và các bộ bản sao. Lớp trình trợ giúp MongoTemplate giúp tăng năng suất khi thực hiện các thao tác Mongo phổ biến. Bao gồm ánh xạ đối tượng tích hợp giữa các tài liệu và POJO

Triển khai MongoPersistentEntity cụ thể của MongoDB bổ sung siêu dữ liệu cụ thể của Mongo, chẳng hạn như tên bộ sưu tập và những thứ tương tự. BasicMongoPersistentProperty Triển khai PersistentProperty cụ thể của MongoDB

Enum đi kèm với hình phạt là cần phải thay đổi lược đồ để thêm hoặc xóa các loại. Điều này đưa chúng ta đến một bảng con và các khóa ngoại (áp dụng cho tất cả các cơ sở dữ liệu). Có, bạn đang lưu trữ một số giá trị dưới dạng khóa (quay lại 1, 2 hoặc 3) và giá trị đã xuất bản, đã đóng và kế thừa được lưu trữ trong một bảng khác

Enums không dễ bảo trì và khóa cơ sở dữ liệu thành phiên bản của thế giới khi cơ sở dữ liệu được thiết kế. Khi sử dụng chuỗi văn bản để so sánh trong mã, có thể viết sai chính tả và ngôn ngữ sẽ không cảnh báo bạn. Enums thường được sắp xếp theo thứ tự mà chúng được tạo ra

một phép liệt kê. Một đối tượng chuỗi chỉ có thể có một giá trị, được chọn từ danh sách các giá trị 'value1', 'value2', , NULL hoặc giá trị lỗi '' đặc biệt. Về lý thuyết, một cột ENUM có thể có tối đa 65.535 giá trị riêng biệt;

Mặc dù sử dụng enums là kiểu an toàn, nhưng nhu cầu chuyển đổi enum thành chuỗi và ngược lại là khá thường xuyên. Và không có tính năng tích hợp sẵn nào để làm điều đó trong Java. Và cuối cùng bạn sẽ sử dụng valueOf() và toString(). Và sử dụng phương pháp đó sẽ không khác nhiều so với việc chỉ sử dụng các chuỗi

Mọi người tạo bảng enum trong SQL vì họ thấy bảng sau dễ đọc hơn - dẫn đến ít lỗi hơn khi viết và duy trì SQL. Bạn có thể biến giới tính thành một chuỗi trực tiếp trong Person, nhưng sau đó bạn sẽ phải thử và thực thi trường hợp. Bạn cũng có thể tăng lần truy cập lưu trữ cho bảng và thời gian truy vấn do sự khác biệt giữa chuỗi và số nguyên tùy thuộc vào mức độ tuyệt vời của DB trong việc tối ưu hóa mọi thứ

Ví dụ: để lưu enum dưới dạng chuỗi trong cơ sở dữ liệu, kiểu mô hình là kiểu enum và kiểu nhà cung cấp là Chuỗi. Hai loại này có thể giống nhau. Hai loại này có thể giống nhau. Các chuyển đổi được xác định bằng hai cây biểu thức Func. một từ ModelClrType đến ProviderClrType và một từ ProviderClrType đến ModelClrType

- Bài đăng này minh họa một cách dễ dàng và hiệu quả để đặt "giá trị enum này so với. chuỗi cơ sở dữ liệu" đang được kiểm tra, sử dụng xUnit. net và một chút NHibernate trên đường đi. Hãy xem một ví dụ từ cơ sở dữ liệu mẫu AdventureWorks của Microsoft (cụ thể là phiên bản LT)