小编Buf*_*alo的帖子

Hibernate Cascading Delete未按预期工作

我正在使用hibernate 3并尝试删除数据库中的记录,并且删除无法正常工作.模式hibernate正在反对(在伪代码中):

create table Employer(
    employer_id number(12) primary key,
    employer_name varchar2(50)
);

create table Employee(
    employee_id number(12) primary key,
    employee_name varchar2(50),
    employer_id number(12) foreign key references employer.employer_id not null
);

create table Employee_Roles(
    role_id number(12) primary key,
    employee_id number(12) foreign key references employee.employee_id not null,
    role varchar2(50)
);
Run Code Online (Sandbox Code Playgroud)

我的hibernate类映射看起来像:

@Entity
public class Employer{

    @Id
    @Column(name = "EMPLOYER_ID")
    private long id;

    @Column
    private String name;


    @OneToMany(targetEntity = Employee.class, fetch = FetchType.EAGER)
    @JoinColumn(name = "employer_id")
    @Cascade(CascadeType.ALL)
    private Set<Employee> employees;
}

@Entity
public …
Run Code Online (Sandbox Code Playgroud)

java hibernate cascading-deletes

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

单元测试综合服务方法

我正在为一个实现暴露接口的类编写(junit)单元测试,其方法如下:

public Set<Setting> getUserSettings();

public Set<Setting> getOrganizationSettings();

public Set<Setting> getDefaults();

public Set<Setting> getAllSettings();
Run Code Online (Sandbox Code Playgroud)

从特定层获取设置的方法从各个位置执行IO以检索其结果.getAllSettings()返回所有级别的所有设置的单个集合,其中"最高"级别具有首选项(即,如果默认和用户级别中存在设置,则将使用用户级别中的设置.

我已经为getUserSettings(),getOrganizationSettings(),getDefaults()编写了单元测试,用Mocked对象模拟了IO操作.

getAllSettings()的实现看起来像

public Set<Setting> getAllSettings(){
    Set<Setting> defaults = getUserSettings();
    Set<Setting> custom = getOrganizationSettings();
    Set<Setting> undefined = getDefaults();
    //perform some sorting and business logic
    //return fully sorted set

}
Run Code Online (Sandbox Code Playgroud)

我的问题在于如何对getAllSettings()方法进行单元测试.我是否对用户/组织/默认设置方法使用的所有下游资源调用使用模拟(使用easymock/powermock)?似乎会有更清洁/更好/更简单的方法来做到这一点.

java junit unit-testing easymock

4
推荐指数
1
解决办法
692
查看次数

Hibernate Criteria Api子查询

我目前正在开发一个项目,将一些遗留的jdbc select语句转移到使用Hibernate及其标准api.

两个相关的表列和SQL查询如下所示:

-QUERIES-
primaryId

-QUERYDETAILS-
primaryId
linkedQueryId -> Foreign key references queries.primaryId
value1
value2

select * 
from queries q 
where q.primaryId not in (SELECT qd.linkedQueryId 
                          FROM querydetails qd 
                          WHERE (qd.value1 LIKE 'PROMPT%' 
                                 OR qd.value2 LIKE 'PROMPT%'));
Run Code Online (Sandbox Code Playgroud)

我的实体关系如下:

@Table("queries")
public class QueryEntity{

    @Id
    @Column
    private Long primaryId;
    @OneToMany(targetEntity = QueryDetailEntity.class, mappedBy = "query", fetch = FetchType.EAGER)
    private Set<QueryDetailEntities> queryDetails;

    //..getters/setters..

}

@Entity
@Table(name = "queryDetails")
public class QueryDetailEntity {
    @Id
    @Column
    private Long primaryId;

    @ManyToOne(targetEntity = QueryEntity.class)
    private QueryEntity query; …
Run Code Online (Sandbox Code Playgroud)

java hibernate criteria

4
推荐指数
1
解决办法
2万
查看次数

命名约定用于返回具有类似参数的不同类型的方法

我有一个SearchService使用算法查询数据库和恢复结果.根据调用者对服务的要求,可以返回几种不同的格式.这些格式是:

  • 与数据库中的表直接匹配的实体列表
  • 匹配记录的主键(Longs)列表
  • "搜索结果"列表,由一堆字段组成,这些字段通常与用户希望从搜索结果中看到的内容相关(例如人名,地址电话号码等)

目前我的SearchService看起来像:

public interface SearchService {
    public List<People> searchPeopleReturnEntity(SearchRequest request);
    public List<Long> searchPeopleReturnId(SearchRequest request);
    public List<SearchResult> searchPeopleReturnSearchResult(SearchRequest request);
}
Run Code Online (Sandbox Code Playgroud)

我正在寻找有关此问题的最佳做法的建议.目前,命名惯例似乎相当笨重,我相信有一个比我现在更好的解决方案.

java naming-conventions

3
推荐指数
1
解决办法
658
查看次数

链接到Web应用程序中的本地内容

我正在研究遗留应用程序的替换应用程序.由于遗留应用程序的某些设计限制,"附件"在我们的数据库中存储为String路径(通常是存储在Windows共享驱动器上的文件).然后,遗留应用程序可以通过打开Windows命令shell并执行给定路径来"打开"附件.

传统(Oracle Forms)应用程序正在被基于JSF的J2EE Web应用程序逐步淘汰.新应用程序需要能够以某种方式"打开"或链接到这些传统附件.这甚至可能吗?我试图使用file:// URL,但使用它们有很多警告.它们只能在IE中的远程主机上工作,firefox/chrome(以及我认为的其他现代浏览器)会阻止本地文件URL.

仅在IE上工作是可以用于此特定功能的东西.我进一步遇到了带空格的文件路径问题.出于某种原因,如果IE遇到一个带有空格的文件路径,比如说

C:\Documents and Settings\user123\My Documents\testing\someFile.txt
Run Code Online (Sandbox Code Playgroud)

它拒绝打开该链接.浏览器会自动将空格('')替换为其编码'%20'的URL.

我尝试的相关链接如下:

<a href="file:///C:\Documents and Settings\user123\My Documents\testing\someFile.txt">link</a>
Run Code Online (Sandbox Code Playgroud)

有什么简单的东西,我错过了吗?或者有更简单的方法吗?

我不太清楚要标记什么,所以请随意重新标记.

html internet-explorer file hyperlink

1
推荐指数
1
解决办法
4848
查看次数