小编qua*_*ial的帖子

如何正确匹配Mockito中的varargs

我一直试图使用Mockito模拟一个使用vararg参数的方法:

interface A {
  B b(int x, int y, C... c);
}

A a = mock(A.class);
B b = mock(B.class);

when(a.b(anyInt(), anyInt(), any(C[].class))).thenReturn(b);
assertEquals(b, a.b(1, 2));
Run Code Online (Sandbox Code Playgroud)

这不起作用,但是如果我这样做:

when(a.b(anyInt(), anyInt())).thenReturn(b);
assertEquals(b, a.b(1, 2));
Run Code Online (Sandbox Code Playgroud)

尽管我在删除方法时完全省略了varargs参数,但这仍然有效.

有线索吗?

java mocking variadic-functions mockito

142
推荐指数
4
解决办法
5万
查看次数

根据具体情况从Hibernate/JPA中排除@Embedded属性中的字段

我正在将Hibernate hbm.xml文件中的某些类迁移到JPA注释.

我们有一个可嵌入的类Address,可以在几个地方使用.每个地方在地址中使用不同的属性子集.

(为简洁省略了getter/setters)

@Embeddable
public class Address {
  String email;
  String address;
  String city; 
  String state;
  String zip;
  String country;
}

@Entity
@Table(name="customer")
public class Customer {
  @Embedded
  @AttributeOverrides({
    @AttributeOverride(name="address", column=@Column(name="ship_addr"),
    @AttributeOverride(name="city", column=@Column(name="ship_city"),
    @AttributeOverride(name="state", column=@Column(name="ship_state"),
    @AttributeOverride(name="zip", column=@Column(name="ship_zip"),
    @AttributeOverride(name="country", column=@Column(name="ship_country")
  })
  Address shippingAddress;

  @Embedded
  @AttributeOverrides({
    @AttributeOverride(name="address", column=@Column(name="bill_addr"),
    @AttributeOverride(name="city", column=@Column(name="bill_city"),
    @AttributeOverride(name="state", column=@Column(name="bill_state"),
    @AttributeOverride(name="zip", column=@Column(name="bill_zip")
  })
  Address billingAddress;
}
Run Code Online (Sandbox Code Playgroud)

请注意,在这个设计的示例中,shippingAddress使用Address.country,但billingAddress不使用; 他们都没有使用Address.email.

问题是Hibernate推测@Column任何我没有明确提供过的列的标签.

我尝试添加@Transient到所有Address字段,但似乎@AttributeOverride不是特朗普@Transient.

这有什么解决方法吗?

java annotations hibernate jpa

15
推荐指数
2
解决办法
8186
查看次数