ข้อยกเว้นของห้องในคลาสที่ไม่มีคำอธิบายประกอบ

ฉันมีคลาสนามธรรมที่มีคลาสย่อย @Dao สองคลาสจาก:

public abstract class PathBase
{
    private static final String PATH_DELIMITER = "/";

    abstract PathEntity getPath(Long id);
    abstract Long insertInternal(PathEntity row);
    abstract String getDatabase();

    abstract List<Long> getAncestorsInternal(String path);
    abstract List<Long> getDescendantsInternal(String path);
    ...
}

ทันทีที่คลาสนี้ถูกขยายด้วย @Dao:

@Dao public abstract class FolderDao extends PathBase

ฉันได้รับข้อผิดพลาดนี้:

ข้อผิดพลาด: วิธีการ DAO สามารถใส่คำอธิบายประกอบได้ด้วยวิธีใดวิธีหนึ่งต่อไปนี้: แทรก, ลบ, แบบสอบถาม, อัปเดต

สำหรับวิธีการ:

    abstract PathEntity getPath(Long id);
    abstract Long insertInternal(PathEntity row);
    abstract String getDatabase();

มันไม่ได้บ่นเกี่ยวกับ:

    abstract List<Long> getAncestorsInternal(String path);
    abstract List<Long> getDescendantsInternal(String path);

แม้ว่ามันจะติดตามคลาส @Entity PathEntity ฉันไม่รู้ว่าทำไมมันถึงส่งข้อผิดพลาดสำหรับ abstract String getDatabase();

ใครมีความคิดว่าเกิดอะไรขึ้นที่นี่...แมลงในห้อง?


person Anthony    schedule 23.10.2017    source แหล่งที่มา


คำตอบ (2)


FWIW ฉันได้รับข้อผิดพลาดสำหรับวิธีการทั้งห้าของคุณ ไม่ใช่แค่สามวิธีแรก เมื่อฉันวาง PathBase ของคุณลงในโปรเจ็กต์ สลับหนึ่งในเอนทิตีของฉันสำหรับ PathEntity และให้คลาส DAO ของฉันขยาย PathBase

วิธีการเหล่านี้ไม่สามารถเป็น abstract Room กำลังสร้างการใช้งาน FolderDao และ Room ไม่มีวิธีนำวิธีการเหล่านั้นไปใช้ ข้อความแสดงข้อผิดพลาดเฉพาะไม่เหมาะ แต่ฉันไม่เห็นว่าสิ่งนี้จะทำงานได้อย่างไร

FWIW ฉันได้ยื่นปัญหาเกี่ยวกับข้อความแสดงข้อผิดพลาดที่ไม่ชัดเจน

person CommonsWare    schedule 23.10.2017
comment
‹ถอนหายใจ› หากเกิดข้อผิดพลาดกับทั้งห้าคน ฉันก็คงประหยัดเวลาได้มากทีเดียว วิธีการเหล่านั้นถูกนำไปใช้ใน FolderDao แต่ฉันเดาว่ามันยังคงใช้งานไม่ได้ (ฉันยังใหม่กับคำอธิบายประกอบที่มีมนต์ขลัง) เมื่อมองย้อนกลับไปก็ไม่ควรมีความสำคัญมากเกินไป ในตอนแรกฉันเริ่มการออกแบบนี้ด้วยกรอบความคิดเชิงวัตถุมากขึ้น แต่นั่นก็ยากสำหรับ Room อยู่ดี Dao ขนาดเดียวที่เหมาะกับทุกคนเพื่อจัดการความสัมพันธ์ทั้งหมดนั้นสมเหตุสมผลพอๆ กับการจัดการ Entity แต่ละอันแยกกัน ในกรณีนี้โค้ดฐานทั้งหมดจะสามารถนำมาใช้ซ้ำได้อยู่แล้ว - person Anthony; 23.10.2017
comment
@Anthony: วิธีการเหล่านั้นถูกนำไปใช้ใน FolderDao แต่ฉันเดาว่ามันยังคงใช้งานไม่ได้ (ฉันยังใหม่กับคำอธิบายประกอบที่มีมนต์ขลัง) - ฉันไม่ได้รับข้อผิดพลาดนั้นเมื่อฉันเพิ่มการใช้งาน getPath() ลงใน DAO ของฉัน คุณใช้ห้องเวอร์ชันใด? ฉันกำลังทดสอบกับ 1.0.0-rc1 - person CommonsWare; 23.10.2017
comment
beta2 ฉันจะลองอัปเกรด - person Anthony; 23.10.2017
comment
หนึ่งในคลาสย่อยที่ใช้ long ไม่ใช่ Long และขาดหายไป getDatabase อันที่ฉันไม่ได้ตรวจสอบอย่างใกล้ชิด เห็นได้ชัดว่าโมเดลนี้จะใช้งานไม่ได้เนื่องจากมีแนวโน้มที่จะเกิดข้อผิดพลาดที่ไม่ชัดเจนเกินไป - person Anthony; 23.10.2017

สำหรับใครก็ตามที่เผชิญกับสถานการณ์ที่คล้ายกันกับตรรกะการสืบค้นหลักที่ซับซ้อนใน 1.1.0 Room ตอนนี้อนุญาตให้ @RawQery ซึ่งช่วยให้คุณใช้ตรรกะหลักได้อย่างหมดจดด้วยตัวคุณเอง ต่อไปนี้คือวิธีที่ฉันใช้โซลูชันเฉพาะนี้:

https://gist.github.com/rcketscientist/4ded9ae64a770ff6929f27b5dbdbe13a

person Anthony    schedule 09.02.2018