zoukankan      html  css  js  c++  java
  • [JavaEE] Data Validation

    When we create Entity and Respority, we also need to do validations to protect our data.

    In Java, validations are built-in, using decorators. For Typescript, found a useful libaray to do the similar validation as well. Checkout class-validator

    Entity:

    @Entity
    public class Book {
    
        // ======================================
        // =             Attributes             =
        // ======================================
    
        @Id
        @GeneratedValue
        private Long id;
    
        @Column(length = 200)
        @NotNull
        @Size(min = 1, max = 200)
        private String title;
    
        @Column(length = 10000)
        @Size(min = 1, max = 10000)
        private String description;
    
        @Column(name = "unit_cost")
        @Min(1)
        private Float unitCost;
    
        @Column(length = 50)
        @NotNull
        @Size(min = 1, max = 50)
        private String isbn;
    
        @Column(name = "publication_date")
        @Temporal(TemporalType.DATE)
        @Past
        private Date publicationDate;
    
        ....    
    }

    Testing:

    We want to test, if we give title as null, it should throw exception.

    @RunWith(Arquillian.class)
    public class BookRepositoryTest {
    
        @Inject
        private BookRepository bookRepository;
    
        // We want the test throw exception
        @Test(expected = Exception.class)
        public void createInvalidBook() {
            Book book = new Book("isbn", null, 12F, 123, Language.ENGLISH, new Date(), "imageURL", "description");
            bookRepository.create(book);
        }
    
        @Deployment
        public static JavaArchive createDeployment() {
            return ShrinkWrap.create(JavaArchive.class)
                    .addClass(BookRepository.class)
                    .addClass(Book.class)
                    .addClass(Language.class)
                    .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml")
                    .addAsManifestResource("META-INF/test-persistence.xml", "persistence.xml");
        }
    
        @org.junit.Test
        public void create() {
        }
    }

    Respority:

    @Transactional(SUPPORTS)
    public class BookRepository {
    
        // ======================================
        // =          Injection Points          =
        // ======================================
    
        @PersistenceContext(unitName = "bookStorePU")
        private EntityManager em;
    
        // ======================================
        // =          Business methods          =
        // ======================================
    
        public Book find(@NotNull Long id) {
            return em.find(Book.class, id);
        }
    
        // For creating and deleting methods, we want to use REQUIRED
        @Transactional(REQUIRED)
        public Book create(@NotNull Book book) {
            em.persist(book);
            return book;
        }
    
    }

    Testing:

        @Test(expected = Exception.class)
        public void findWithInvalidId() {
            bookRepository.find(null);
        }
  • 相关阅读:
    Object Modeling
    数据库的比较
    关系数据库与非关系数据库
    结构化查询语言-SQL
    SQLite
    acid (数据库事务正确执行的四个基本要素的缩写)
    UITableView设计思想 考察
    复杂软件的考虑点与UITableView
    设计模式与哲学
    复杂对象的组装与创建-建造者模式
  • 原文地址:https://www.cnblogs.com/Answer1215/p/9401910.html
Copyright © 2011-2022 走看看