【问题标题】:The constructor Category(String, String) is not visible - create constructor for some field using lombok?构造函数 Category(String, String) 不可见 - 使用 lombok 为某些字段创建构造函数?
【发布时间】:2018-02-10 19:33:19
【问题描述】:

我用谷歌搜索了很多,仍然没有找到任何解决方案,因此在这里发布一个问题..

我正在使用 lombok 开发多对多关系示例。我只想为四个字段中的两个字段创建参数构造函数。我们怎样才能做到这一点?

@Data
@Entity
@Table(name = "stock")
public class Stock implements Serializable{

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "STOCK_ID", unique = true, nullable = false)
    private Integer stockId;

    @Column(name = "STOCK_CODE", unique = true, nullable = false, length = 10)
    private String stockCode;

    @Column(name = "STOCK_NAME", unique = true, nullable = false, length = 20)
    private String stockName;

    @ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinTable(name = "stock_category", joinColumns = {
        @JoinColumn(name = "STOCK_ID", nullable = false, updatable = false)},
        inverseJoinColumns = {@JoinColumn(name = "CATEGORY_ID", nullable = false, updatable = false)})
    private Set<Category> categories = new HashSet<Category>(0);
}

类别

@Data
@RequiredArgsConstructor(staticName = "of")
@Entity
@Table(name = "category")
public class Category {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "CATEGORY_ID", unique = true, nullable = false)
    private Integer categoryId;

    @Column(name = "NAME", nullable = false, length = 10)
    @NonNull
    private String name;

    @Column(name = "[DESC]", nullable = false)
    @NonNull
    private String desc;

    @ManyToMany(fetch = FetchType.LAZY, mappedBy = "categories")
    private Set<Stock> stocks = new HashSet<Stock>(0);
}

App.java

为什么我不能设置受限字段构造函数

public class App {
    public static void main(String[] args) {
        System.out.println("Hello World!");
        Session session = HibernateUtil.getSessionFactory().openSession();

        session.beginTransaction();

        Stock stock = new Stock();
        stock.setStockCode("7052");
        stock.setStockName("PADINI");

        Category category1 = new Category("CONSUMER", "CONSUMER COMPANY");
        Category category2 = new Category("INVESTMENT", "INVESTMENT COMPANY");

        Set<Category> categories = new HashSet<Category>();
        categories.add(category1);
        categories.add(category2);

        stock.setCategories(categories);

        session.save(stock);

        session.getTransaction().commit();
        System.out.println("Done");
    }
}

【问题讨论】:

  • 请不要发帖images of code。它们对那些试图解决您的问题的人没有帮助,因为我们无法复制和粘贴图像显示的代码。而是发帖properly formatted code blocks
  • 编辑您的问题以删除代码图像,而是将其作为代码块发布,以及一个例外情况,我相信这篇文章不值得投反对票。
  • 对于您提供的输入的质量,您会收到赞成或反对票。如果您收到反对票,请考虑改进您的内容,而不是开始乞讨。相反:要求不投反对票很容易导致投反对票。考虑删除您的 cmets,并在以后避免此类声明。

标签: java spring hibernate lombok


【解决方案1】:

原因是

如果设置了staticName,则生成的构造函数将是私有的,另外还有一个 static 'constructor' 使用相同的参数列表生成 包装真正的构造函数。

请不要忘记@NoArgsConstructor,因为 Hibernate 需要它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-05
    • 1970-01-01
    • 2020-06-21
    • 1970-01-01
    • 2014-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多