栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Lombok @Builder和JPA默认构造函数

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Lombok @Builder和JPA默认构造函数

更新

根据反馈和John的回答,我已更新了不再使用

@Tolerate
or的答案
@Data
,而是通过
@Getter
和创建访问器和变量,通过
@Setter
创建默认构造函数via
@NoArgsConstructor
,最后我们创建了构建器通过via所需的所有args构造函数
@AllArgsConstructor

因为您想使用构建器模式,所以我想您想限制构造函数和mutators方法的可见性。为此,我们

packageprivate
通过和注释上的属性以及注释上的
access
属性将可见性设置为。
@NoArgsConstructor``@AllArgsConstructor``value``@Setter

重要

记住要正确重写

toString
equals
hashCode
。有关详细信息,请参见Vlad Mihalcea的以下帖子:

  • 最佳的实现方式,将哈希码和字符串与jpa并休眠
  • 如何使用jpa实体标识符实现等于和哈希码
  • 休眠事实等于哈希码
    package com.stackoverflow.SO34299054;    import static org.junit.Assert.*;    import java.util.Random;    import javax.persistence.Entity;    import javax.persistence.GeneratedValue;    import javax.persistence.GenerationType;    import javax.persistence.Id;    import org.junit.Test;    import lombok.AccessLevel;    import lombok.AllArgsConstructor;    import lombok.Builder;    import lombok.Getter;    import lombok.NoArgsConstructor;    import lombok.Setter;    @SuppressWarnings("javadoc")    public class Answer {        @Entity        @Builder(toBuilder = true)        @AllArgsConstructor(access = AccessLevel.PACKAGE)        @NoArgsConstructor(access = AccessLevel.PACKAGE)        @Setter(value = AccessLevel.PACKAGE)        @Getter        public static class Person { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id;         }                @Test        public void testPersonBuilder() { final Long expectedId = new Random().nextLong(); final Person fromBuilder = Person.builder()     .id(expectedId)     .build(); assertEquals(expectedId, fromBuilder.getId());        }                @Test        public void testPersonConstructor() { final Long expectedId = new Random().nextLong(); final Person fromNoArgConstructor = new Person(); fromNoArgConstructor.setId(expectedId); assertEquals(expectedId, fromNoArgConstructor.getId());        }    }

旧版本使用

@Tolerate
@Data

使用

@Tolerate
work允许添加noarg构造函数。

因为您想使用构建器模式,所以我想您想控制setter方法的可见性。

@Data
注解使得生成的制定者
public
,应用
@Setter(value =AccessLevel.PROTECTED)
的领域,因此他们
protected

记住要正确重写

toString
equals
hashCode
。有关详细信息,请参见Vlad Mihalcea的以下帖子:

  • 最佳的实现方式,将哈希码和字符串与jpa并休眠
  • 如何使用jpa实体标识符实现等于和哈希码
  • 休眠事实等于哈希码
    package lombok.javac.handlers.stackoverflow;    import static org.junit.Assert.*;    import java.util.Random;    import javax.persistence.GenerationType;    import javax.persistence.GeneratedValue;    import javax.persistence.Id;    import lombok.AccessLevel;    import lombok.Builder;    import lombok.Data;    import lombok.Setter;    import lombok.experimental.Tolerate;    import org.junit.Test;    public class So34241718 {        @Builder        @Data        public static class Person { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Setter(value = AccessLevel.PROTECTED) Long id; @Tolerate Person() {}        }        @Test        public void testPersonBuilder() { Long expectedId = new Random().nextLong(); final Person fromBuilder = Person.builder()     .id(expectedId)     .build(); assertEquals(expectedId, fromBuilder.getId());        }        @Test        public void testPersonConstructor() { Long expectedId = new Random().nextLong(); final Person fromNoArgConstructor = new Person(); fromNoArgConstructor .setId(expectedId); assertEquals(expectedId, fromNoArgConstructor.getId());        }    }


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/437722.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号