如何在多对多Map中添加即时列?

wfauudbj  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(341)

所有人!我必须用多对多Map表来表示“市场”和“客户”。hibernate自动创建带有id的表post\u comment表,然后我就可以得到对象和所有的东西了…但是我需要客户在市场上看到什么东西的日期

市场等级

@Entity
@Setter
@Getter
@NoArgsConstructor
public class Market{

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    @ElementCollection(targetClass = Customer.class, fetch = FetchType.EAGER)
    @CollectionTable(name = "market_customer", joinColumns = @JoinColumn(name = "market_id"))
    private Set<Customer> banks = new HashSet<>();

    ............
}

市场等级

@Entity
@Setter
@Getter
@NoArgsConstructor
public class Customer{

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    ............
}

我可以用ID自动创建marcet\u客户,但我不知道如何添加日期,最重要的是如何通过jpa存储库获取它。。。

yzxexxkh

yzxexxkh1#

这就是hibernate@manytomany的特点——它并不意味着有额外的列,也不意味着可以查询(非常好)。也许您想使用一个单独的实体和一个复合主键:

@Entity(name = "MarketCustomer")
@Table(name = "market_customer")
public class MarketCustomer {

    @EmbeddedId
    private MarketCustomerId id;

    @ManyToOne(fetch = FetchType.LAZY)
    @MapsId("marketId")
    private Market market;

    @ManyToOne(fetch = FetchType.LAZY)
    @MapsId("customerId")
    private Customer customer;

    ...
}

@Embeddable
public class MarketCustomerId implements Serializable {

    @Column(name = "market_id")
    private Long marketId;

    @Column(name = "customer_id")
    private Long customerId;

    ...
}

一篇关于这个的好文章https://vladmihalcea.com/the-best-way-to-map-a-many-to-many-association-with-extra-columns-when-using-jpa-and-hibernate/ . 与https://bootify.io you 也可以在线创建模式(没有复合主键,但是单独的主列也可以)。

qacovj5a

qacovj5a2#

与指南多对多链接。https://medium.com/@samuelmumo.sm/spring-数据-jpa-composite-key-mapping-example-750eb54a3d99

相关问题