我一直试图使用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参数,但这仍然有效.
有线索吗?
我正在将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
.
这有什么解决方法吗?