标签: dao

处理服务层中的Dao异常

如果我的Dao层抛出Dao特定异常,那么在我的服务层处理它们是否会引起关注?如果是,那么我应该使异常通用且独立于任何层来解决它,还是有其他方法?

同样的问题适用于服务层抛出的UI层处理异常.

java service dao exception-handling

23
推荐指数
3
解决办法
3万
查看次数

Android Room SQLite_ERROR没有这样的表

我正在尝试使用Android Room,在完成本教程之后,当我尝试构建应用程序时,我收到以下错误:

Error:(23, 27) error: There is a problem with the query: [SQLITE_ERROR] SQL error or missing database (no such table: screen_items)

这个名字很好,应该存在.在进行更改后,我清理了项目并确保从设备中完全卸载了该项目.

在我用这条线Activity初始化东西onCreate:

db = AppDatabase.getDatabase(getApplicationContext());
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

AppDatabase

@Database(entities = {PermitItem.class}, version = 1, exportSchema = false)
public abstract class AppDatabase extends RoomDatabase {
  public static String DATABASE_NAME = "my_database";
  public final static String TABLE_ITEMS = "screen_items";

  private static AppDatabase INSTANCE;

  public abstract PermitItemDao permitItemModel();

  public static AppDatabase getDatabase(Context context) { …
Run Code Online (Sandbox Code Playgroud)

sqlite android dao android-room

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

Active Record和DAO之间的区别?

数据访问对象和活动记录之间有什么区别?它们似乎完全相同,因为它们在应用程序和持久层之间构建了一个层,并使用SQL查询抽象出直接数据库访问.

activerecord dao

22
推荐指数
2
解决办法
8330
查看次数

DAO单元测试

我一直在关注使用它进行单元测试DAO类的EasyMock和教程/示例,用于"外部容器"测试.但是,我认为他们中的大多数都在谈论测试服务层,而不是模拟DAO类.我有点困惑,你真的是如何对DAO层进行单元测试吗?

有人会说,与DB和EJB交互的测试实际上是集成测试而不是单元测试,但是你怎么知道你的SQL是否正确(假设没有ORM)并且你的DAO插入/查询真实的正确数据(读取,本地数据库与生产中的数据库类似?

我读到DBUnit是这种情况的解决方案.但我的问题是使用像DBUnit这样的框架"外部容器".如果DAO依赖于某些EJB,我们如何处理事务,如果有更新其他表的触发器会发生什么?

仅对具有此类依赖性的DAO进行单元测试的最佳方法是什么?

dbunit unit-testing dao easymock

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

休眠删除错误:批量更新返回意外行计数

我在下面写了这个方法,假设从数据库中删除一个成员记录.但是当我在我的servlet中使用它时,它会返回一个错误.

会员道教班

public static void deleteMember(Member member) {
    Session hibernateSession = HibernateUtil.getSessionFactory().getCurrentSession();
    Transaction tx = hibernateSession.beginTransaction();
    hibernateSession.delete(member);
    tx.commit();
}
Run Code Online (Sandbox Code Playgroud)

控制器部分

if(delete != null) {
    HttpSession httpSession = request.getSession();
    Member member = (Member) httpSession.getAttribute("member");

    MemberDao.deleteMember(member);

    nextPage = "ledenlijst.jsp";
}
Run Code Online (Sandbox Code Playgroud)

HTTP状态500

org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1
Run Code Online (Sandbox Code Playgroud)

有时,当我尝试多次执行页面时,它甚至会抛出此错误.

org.hibernate.exception.GenericJDBCException: Could not execute JDBC batch update
Run Code Online (Sandbox Code Playgroud)

有人知道究竟是什么导致了这些错误吗?

java methods dao hibernate

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

Spring + Hibernate:具有相同标识符值的不同对象已与会话关联

在我的应用程序中,它使用Spring和Hibernate,我解析一个CSV文件,并在handleRow()每次从CSV文件中读取记录时通过调用填充数据库.

我的域名模型:

'家庭'有很多'SubFamily'

'SubFamily'有很多'Locus'

'Locus'属于'Species'

Family <-> SubFamily <-> Locus 都是双向映射.

码:

public void handleRow(Family dummyFamily, SubFamily dummySubFamily, Locus dummyLocus) {
  //Service method which access DAO layers
  CommonService serv = ctx.getCommonService();

  boolean newFamily=false;
  Family family=serv.getFamilyByFamilyId(dummyFamily.getFamilyId());
  if(family==null){
    newFamily=true;
    family=new Family();
    family.setFamilyId(dummyFamily.getFamilyId());
    family.setFamilyIPRId(dummyFamily.getFamilyIPRId());
    family.setFamilyName(dummyFamily.getFamilyName());
    family.setFamilyPattern(dummyFamily.getFamilyPattern());
    family.setRifID(dummyFamily.getRifID());
  }

  SubFamily subFamily = family.getSubFamilyBySubFamilyId( dummySubFamily.getSubFamilyId() );
  if(subFamily==null){   
    subFamily=new SubFamily();
    subFamily.setRifID(dummySubFamily.getRifID());   
    subFamily.setSubFamilyId(dummySubFamily.getSubFamilyId());
    subFamily.setSubFamilyIPRId(dummySubFamily.getSubFamilyIPRId());
    subFamily.setSubFamilyName(dummySubFamily.getSubFamilyName());
    subFamily.setSubFamilyPattern(dummySubFamily.getSubFamilyPattern());

    family.addSubFamily(subFamily);
  }

  //use the save reference, to update from GFF handler
  Locus locus = dummyLocus;

  subFamily.addLocus(locus);

  assignSpecies(serv,locus);
  //Persist object …
Run Code Online (Sandbox Code Playgroud)

java spring dao hibernate

19
推荐指数
2
解决办法
7万
查看次数

ADO和DAO之间的区别

这不是一个关于哪个更好的问题,而是一个关于它们在功能上有何不同的问题.我遇到的问题已经解决了,但我很好奇为什么会发生这种情况.

背景 - 使用Excel vba从Access数据库中提取数据.当用户单击按钮时,会从Access中提取记录集,并将各种数据填充到电子表格中.然后,从另一个查询中提取另一个记录集以填充电子表格的另一部分.

ADO做了什么 - ADO非常适合我的第一个记录集.但是,我的第二个记录集转到Access中的查询,运行,并且不返回任何行.如果我在Access中运行此查询,它会打开(大约3到4秒后).此查询具有多个连接,计算项,限制以及可能的Union查询(我尝试了许多不同的方式,有/无联合等).我尝试关闭并重新打开ado连接.我尝试更改超时值,我甚至测试使用ADO命令运行对此数据的Make表查询,然后从表中取出(这样做顺便说一句,但不是最好的情况,因为数据不断变化,每次有人使用此工具时,我都不想运行make table查询.

所以,我把第二个数据拉到了DAO,看,它有效.第一个数据拉取仍然是ADO(我通常更喜欢使用),但现在考虑将其更改为DAO,因为我宁愿在代码中使用一种数据访问方法.

那么,有人可以向我解释为什么ADO不会在一个案例中提取数据,但DAO会吗?同样,这纯粹是出于提供信息的目的.

excel ms-access vba dao ado

19
推荐指数
2
解决办法
3万
查看次数

Hibernate - 注释和公共注释之间的区别?

保持简短和甜美:

有hibernate-commons-annotations 4.1.0-Final和hibernate-annotations 3.5.6-Final.

我是个小伙子,他们之间有什么区别,我需要他们两个吗?

试图"避免"JPA,我的意思是使用嵌入在Hibernate中的JPA 2.0标准.

谢谢!

java orm dao hibernate hibernate-annotations

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

跨DAO的Android Room交易

官方文件指出:

It is recommended to have multiple Dao classes in your codebase depending on the tables they touch.
Run Code Online (Sandbox Code Playgroud)

并且可以使用Transaction注释标记方法,如下所示:

 @Dao
 public abstract class ProductDao {
    @Insert
     public abstract void insert(Product product);
    @Delete
     public abstract void delete(Product product);
    @Transaction
     public void insertAndDeleteInTransaction(Product newProduct, Product oldProduct) {
         // Anything inside this method runs in a single transaction.
         insert(newProduct);
         delete(oldProduct);
     }
 }
Run Code Online (Sandbox Code Playgroud)

但是,如果一个事务跨越多个DAO怎么办?我应该将所有DAO合并为一个只是为了支持交易,还是有更好的方法来做到这一点?

sqlite android persistence dao android-room

19
推荐指数
2
解决办法
2810
查看次数

有没有办法在方法上更改JPA fetch类型?

有没有办法在不编辑实体对象的情况下在单个方法上更改JPA fetch类型?

我有一个由JPA实体类组成的共享ORM层.该ORM层由两个DAO层访问.一个DAO需要延迟抓取,因为它适用于我的Web应用程序,另一个需要急切的抓取,因为我需要它是线程安全的.

这是我的线程安全DAO的示例方法,

@PersistenceContext(unitName = "PersistenceUnit", type = PersistenceContextType.TRANSACTION)
private EntityManager em;

public ErrorCode findErrorCodeById(short id) {
    return (ErrorCode) em.createNamedQuery("ErrorCode.findById").
            setParameter("id", id).getSingleResult();
}
Run Code Online (Sandbox Code Playgroud)

我如何使这个方法(或整个类)使用渴望获取?

persistence dao jpa thread-safety fetching-strategy

18
推荐指数
2
解决办法
3万
查看次数