我有两个实体,我想通过多个列加入.这些列@Embeddable
由两个实体共享的对象共享.在下面的示例中,Foo
只能有一个Bar
但Bar
可以有多个Foo
s(其中AnEmbeddableObject
是唯一的键Bar
).这是一个例子:
@Entity
@Table(name = "foo")
public class Foo {
@Id
@Column(name = "id")
@GeneratedValue(generator = "seqGen")
@SequenceGenerator(name = "seqGen", sequenceName = "FOO_ID_SEQ", allocationSize = 1)
private Long id;
@Embedded
private AnEmbeddableObject anEmbeddableObject;
@ManyToOne(targetEntity = Bar.class, fetch = FetchType.LAZY)
@JoinColumns( {
@JoinColumn(name = "column_1", referencedColumnName = "column_1"),
@JoinColumn(name = "column_2", referencedColumnName = "column_2"),
@JoinColumn(name = "column_3", referencedColumnName = "column_3"),
@JoinColumn(name = "column_4", referencedColumnName = "column_4")
})
private …
Run Code Online (Sandbox Code Playgroud) 我们在我们想要模拟的一个Java类中有一个URL对象,但它是最后一个类,所以我们不能.我们不希望达到上述水平,并模拟InputStream,因为这仍然会给我们带来未经测试的代码(我们有严格的测试覆盖标准).
我已经尝试过jMockIt的反射功能,但是我们在Mac上工作,并且Java代理处理程序存在一些我无法解决的问题.
那么在junit测试中是否有任何不涉及使用真实URL的解决方案?
我有一个参数化的hibernate dao执行基本的crud操作,并且当参数化被用作委托来完成给定dao的基本crud操作时.
public class HibernateDao <T, ID extends Serializable> implements GenericDao<T, ID>
Run Code Online (Sandbox Code Playgroud)
我希望能够在运行时从T派生Class以在Hibernate中创建条件查询,这样:
public T findByPrimaryKey(ID id) {
return (T) HibernateUtil.getSession().load(T.getClass(), id);
}
Run Code Online (Sandbox Code Playgroud)
我知道:
T.getClass()
Run Code Online (Sandbox Code Playgroud)
不存在,但有没有办法在运行时从T派生正确的Class对象?
我看过泛型和反思,但没有找到合适的解决方案,也许我错过了一些东西.
谢谢.
我曾经遇到过java的验证框架,你在其中编写了一个保护数据类型完整性的方法,并且该数据类型上的任何CRUD操作都自动调用了这个方法.
有谁知道这个框架是什么?我只是想避免对附加到数据类型的每个CRUD方法进行重复验证.
我有一个@ManyToMany映射,其中表通过映射表自引用,我们想要在实际映射表中对订单ID进行排序,但发现很难配置它.
我们可以在hibernate xml中执行它,所以很自然地假设JPA注释中有支持.有人知道我们如何对映射表中的值进行排序吗?
该表是:
wap_site_components
intid
strname
intcomponentdef
dtmcreated
intcustomer
Run Code Online (Sandbox Code Playgroud)
以及自引用的映射表是:
wap_site_component_relations
intid
intparent (references intid in wap_site_components)
intchild (references intid in wap_site_components)
intorder (this is the value we want to order the collection on)
Run Code Online (Sandbox Code Playgroud)
在Hibernate Annotations中我们有:
@ManyToMany (fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinTable (name = "wap_site_component_relations",
joinColumns = {@JoinColumn (name = "intparent", referencedColumnName = "id") },
inverseJoinColumns = {@JoinColumn (name = "intchild", referencedColumnName = "id") })
public Set<WapComponent> getChildren() {
return children;
}
Run Code Online (Sandbox Code Playgroud)
这是我们在hibernate xml中执行它的方式:
<set
name="children"
table="wap_site_component_relations" …
Run Code Online (Sandbox Code Playgroud) 我有一个枚举:
@XmlEnum
@XmlRootElement
public enum Product {
POKER("favourite-product-poker"),
SPORTSBOOK("favourite-product-casino"),
CASINO("favourite-product-sportsbook"),
SKILL_GAMES("favourite-product-skill-games");
private static final String COULD_NOT_FIND_PRODUCT = "Could not find product: ";
private String key;
private Product(final String key) {
this.key = key;
}
/**
* @return the key
*/
public String getKey() {
return key;
}
Run Code Online (Sandbox Code Playgroud)
我在这样的REST服务中输出:
GenericEntity<List<Product>> genericEntity = new GenericEntity<List<Product>>(products) {
};
return Response.ok().entity(genericEntity).build();
Run Code Online (Sandbox Code Playgroud)
它输出如下:
<products>
<product>POKER</product>
<product>SPORTSBOOK</product>
<product>CASINO</product>
<product>SKILL_GAMES</product>
</products>
Run Code Online (Sandbox Code Playgroud)
我希望它输出枚举名称(即POKER)和密钥(即"最喜欢的产品 - 扑克").
我尝试了很多不同的方法,包括使用@XmlElement,@ XMLEnumValue和@XmlJavaTypeAdapter,而不是同时使用它们.
有没有人知道如何实现这一点,就像普通的JAXB注释bean一样?
谢谢.
我遇到过几个实例,在这些实例中,POJO采用代理的hibernate bean进行一些工作.
例如,如果我xml为框架X注释bean并将其传递给框架X,则它无法识别该bean,因为它传递了代理对象 - 它没有框架X的注释.
这有一个共同的解决方案吗?我不希望将bean定义为急切加载,或者在应用程序的任何位置转换延迟加载.
java ×7
hibernate ×3
jpa ×2
annotations ×1
enums ×1
frameworks ×1
generics ×1
jaxb ×1
lazy-loading ×1
many-to-many ×1
mocking ×1
orm ×1
reflection ×1
sql-order-by ×1
url ×1
validation ×1